使用USB输出时间和步数同步,一组十个字节,帧头0d ff,前四个字节编码器值,后四个字节是时间ms
This commit is contained in:
@ -81,7 +81,7 @@
|
||||
/* #define HAL_IRDA_MODULE_ENABLED */
|
||||
/* #define HAL_SMARTCARD_MODULE_ENABLED */
|
||||
/* #define HAL_WWDG_MODULE_ENABLED */
|
||||
/* #define HAL_PCD_MODULE_ENABLED */
|
||||
#define HAL_PCD_MODULE_ENABLED
|
||||
/* #define HAL_HCD_MODULE_ENABLED */
|
||||
/* #define HAL_DFSDM_MODULE_ENABLED */
|
||||
/* #define HAL_DSI_MODULE_ENABLED */
|
||||
|
@ -55,11 +55,14 @@ void SVC_Handler(void);
|
||||
void DebugMon_Handler(void);
|
||||
void PendSV_Handler(void);
|
||||
void SysTick_Handler(void);
|
||||
void EXTI2_IRQHandler(void);
|
||||
void EXTI1_IRQHandler(void);
|
||||
void EXTI4_IRQHandler(void);
|
||||
void DMA1_Stream0_IRQHandler(void);
|
||||
void TIM2_IRQHandler(void);
|
||||
void USART1_IRQHandler(void);
|
||||
void OTG_HS_EP1_OUT_IRQHandler(void);
|
||||
void OTG_HS_EP1_IN_IRQHandler(void);
|
||||
void OTG_HS_IRQHandler(void);
|
||||
/* USER CODE BEGIN EFP */
|
||||
|
||||
/* USER CODE END EFP */
|
||||
|
@ -43,17 +43,25 @@ void MX_GPIO_Init(void)
|
||||
|
||||
/* GPIO Ports Clock Enable */
|
||||
__HAL_RCC_GPIOH_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||
|
||||
/*Configure GPIO pins : PA2 PA4 */
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_4;
|
||||
/*Configure GPIO pin : PC1 */
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_1;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pin : PA4 */
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_4;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
|
||||
/* EXTI interrupt init*/
|
||||
HAL_NVIC_SetPriority(EXTI2_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(EXTI2_IRQn);
|
||||
HAL_NVIC_SetPriority(EXTI1_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(EXTI1_IRQn);
|
||||
|
||||
HAL_NVIC_SetPriority(EXTI4_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(EXTI4_IRQn);
|
||||
@ -65,12 +73,12 @@ volatile uint8_t captureFlag = 0;
|
||||
extern uint32_t G_StartMillis;
|
||||
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
|
||||
{
|
||||
if (GPIO_Pin == GPIO_PIN_2)
|
||||
if (GPIO_Pin == GPIO_PIN_1)
|
||||
{
|
||||
// <20><EFBFBD>?查捕获标志,避免重复捕获
|
||||
// <20>?查捕获标志,避免重复捕获
|
||||
if (!captureFlag)
|
||||
{
|
||||
// 处理上升沿触发事<E58F91><EFBFBD>?
|
||||
// 处理上升沿触发事<E58F91>?
|
||||
G_StartMillis=0;
|
||||
G_StartMillis = HAL_GetTick(); //获取当前系统时间
|
||||
|
||||
|
@ -21,10 +21,12 @@
|
||||
#include "dma.h"
|
||||
#include "tim.h"
|
||||
#include "usart.h"
|
||||
#include "usb_device.h"
|
||||
#include "gpio.h"
|
||||
|
||||
/* Private includes ----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Includes */
|
||||
#include "usbd_cdc_if.h"
|
||||
#include "retarget.h"
|
||||
/* USER CODE END Includes */
|
||||
|
||||
@ -49,14 +51,15 @@
|
||||
volatile uint32_t G_StartMillis = 0;
|
||||
volatile uint32_t G_CurrentMillis = 0;
|
||||
int enc;
|
||||
uint8_t buf[10];
|
||||
int enc_old;
|
||||
uint8_t buf[1000];
|
||||
/* USER CODE END PV */
|
||||
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
void SystemClock_Config(void);
|
||||
static void MPU_Config(void);
|
||||
/* USER CODE BEGIN PFP */
|
||||
void data_shift();
|
||||
void data_shift(int i);
|
||||
/* USER CODE END PFP */
|
||||
|
||||
/* Private user code ---------------------------------------------------------*/
|
||||
@ -104,6 +107,7 @@ int main(void)
|
||||
MX_DMA_Init();
|
||||
MX_TIM2_Init();
|
||||
MX_USART1_UART_Init();
|
||||
MX_USB_DEVICE_Init();
|
||||
/* USER CODE BEGIN 2 */
|
||||
RetargetInit(&huart1);
|
||||
HAL_TIM_Encoder_Start(&htim2, TIM_CHANNEL_ALL);
|
||||
@ -117,11 +121,21 @@ int main(void)
|
||||
/* USER CODE END WHILE */
|
||||
|
||||
/* USER CODE BEGIN 3 */
|
||||
for(int i=0;i<1000;i+=10)
|
||||
{
|
||||
enc_old = __HAL_TIM_GET_COUNTER(&htim2);//获取第一次定时器的值
|
||||
enc = enc_old;
|
||||
while(abs(enc-enc_old)==0) {
|
||||
enc = __HAL_TIM_GET_COUNTER(&htim2);//获取第二次定时器的值
|
||||
}
|
||||
|
||||
enc = __HAL_TIM_GET_COUNTER(&htim2);//获取定时器的值
|
||||
G_CurrentMillis = HAL_GetTick()-G_StartMillis;
|
||||
data_shift();
|
||||
HAL_UART_Transmit_DMA(&huart1, buf, sizeof(buf));
|
||||
G_CurrentMillis = HAL_GetTick()-G_StartMillis;
|
||||
data_shift(i);
|
||||
}
|
||||
|
||||
//HAL_UART_Transmit_DMA(&huart1, buf, sizeof(buf));
|
||||
CDC_Transmit_HS(buf, sizeof(buf));
|
||||
//HAL_Delay(10);
|
||||
// printf("start time:%lu\r\n", G_StartMillis);
|
||||
// printf("current time:%lu\r\n", G_CurrentMillis);
|
||||
|
||||
@ -158,8 +172,9 @@ void SystemClock_Config(void)
|
||||
/** Initializes the RCC Oscillators according to the specified parameters
|
||||
* in the RCC_OscInitTypeDef structure.
|
||||
*/
|
||||
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
|
||||
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48|RCC_OSCILLATORTYPE_HSE;
|
||||
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
|
||||
RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
|
||||
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
||||
RCC_OscInitStruct.PLL.PLLM = 2;
|
||||
@ -196,17 +211,17 @@ void SystemClock_Config(void)
|
||||
|
||||
/* USER CODE BEGIN 4 */
|
||||
|
||||
void data_shift(){
|
||||
buf[0] = (uint8_t)(enc & 0xFF);
|
||||
buf[1] = (uint8_t)((enc >> 8) & 0xFF);
|
||||
buf[2] = (uint8_t)((enc >> 16) & 0xFF);
|
||||
buf[3] = (uint8_t)((enc >> 24) & 0xFF);
|
||||
buf[4] = G_CurrentMillis & 0xFF;
|
||||
buf[5] = (G_CurrentMillis >> 8) & 0xFF;
|
||||
buf[6] = (G_CurrentMillis >> 16) & 0xFF;
|
||||
buf[7] = (G_CurrentMillis >> 24) & 0xFF;
|
||||
buf[8] = 0x0d;
|
||||
buf[9] = 0xff;
|
||||
void data_shift(int i){
|
||||
buf[i+0] = (uint8_t)(enc & 0xFF);
|
||||
buf[i+1] = (uint8_t)((enc >> 8) & 0xFF);
|
||||
buf[i+2] = (uint8_t)((enc >> 16) & 0xFF);
|
||||
buf[i+3] = (uint8_t)((enc >> 24) & 0xFF);
|
||||
buf[i+4] = G_CurrentMillis & 0xFF;
|
||||
buf[i+5] = (G_CurrentMillis >> 8) & 0xFF;
|
||||
buf[i+6] = (G_CurrentMillis >> 16) & 0xFF;
|
||||
buf[i+7] = (G_CurrentMillis >> 24) & 0xFF;
|
||||
buf[i+8] = 0x0d;
|
||||
buf[i+9] = 0xff;
|
||||
}
|
||||
/* USER CODE END 4 */
|
||||
|
||||
|
@ -55,6 +55,7 @@
|
||||
/* USER CODE END 0 */
|
||||
|
||||
/* External variables --------------------------------------------------------*/
|
||||
extern PCD_HandleTypeDef hpcd_USB_OTG_HS;
|
||||
extern TIM_HandleTypeDef htim2;
|
||||
extern DMA_HandleTypeDef hdma_usart1_tx;
|
||||
extern UART_HandleTypeDef huart1;
|
||||
@ -201,17 +202,17 @@ void SysTick_Handler(void)
|
||||
/******************************************************************************/
|
||||
|
||||
/**
|
||||
* @brief This function handles EXTI line2 interrupt.
|
||||
* @brief This function handles EXTI line1 interrupt.
|
||||
*/
|
||||
void EXTI2_IRQHandler(void)
|
||||
void EXTI1_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN EXTI2_IRQn 0 */
|
||||
/* USER CODE BEGIN EXTI1_IRQn 0 */
|
||||
|
||||
/* USER CODE END EXTI2_IRQn 0 */
|
||||
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_2);
|
||||
/* USER CODE BEGIN EXTI2_IRQn 1 */
|
||||
/* USER CODE END EXTI1_IRQn 0 */
|
||||
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_1);
|
||||
/* USER CODE BEGIN EXTI1_IRQn 1 */
|
||||
|
||||
/* USER CODE END EXTI2_IRQn 1 */
|
||||
/* USER CODE END EXTI1_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
@ -270,6 +271,48 @@ void USART1_IRQHandler(void)
|
||||
/* USER CODE END USART1_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles USB On The Go HS End Point 1 Out global interrupt.
|
||||
*/
|
||||
void OTG_HS_EP1_OUT_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN OTG_HS_EP1_OUT_IRQn 0 */
|
||||
|
||||
/* USER CODE END OTG_HS_EP1_OUT_IRQn 0 */
|
||||
HAL_PCD_IRQHandler(&hpcd_USB_OTG_HS);
|
||||
/* USER CODE BEGIN OTG_HS_EP1_OUT_IRQn 1 */
|
||||
|
||||
/* USER CODE END OTG_HS_EP1_OUT_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles USB On The Go HS End Point 1 In global interrupt.
|
||||
*/
|
||||
void OTG_HS_EP1_IN_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN OTG_HS_EP1_IN_IRQn 0 */
|
||||
|
||||
/* USER CODE END OTG_HS_EP1_IN_IRQn 0 */
|
||||
HAL_PCD_IRQHandler(&hpcd_USB_OTG_HS);
|
||||
/* USER CODE BEGIN OTG_HS_EP1_IN_IRQn 1 */
|
||||
|
||||
/* USER CODE END OTG_HS_EP1_IN_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles USB On The Go HS global interrupt.
|
||||
*/
|
||||
void OTG_HS_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN OTG_HS_IRQn 0 */
|
||||
|
||||
/* USER CODE END OTG_HS_IRQn 0 */
|
||||
HAL_PCD_IRQHandler(&hpcd_USB_OTG_HS);
|
||||
/* USER CODE BEGIN OTG_HS_IRQn 1 */
|
||||
|
||||
/* USER CODE END OTG_HS_IRQn 1 */
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN 1 */
|
||||
|
||||
/* USER CODE END 1 */
|
||||
|
@ -19,7 +19,7 @@
|
||||
/* USER CODE END Header */
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "usart.h"
|
||||
#include "stdio.h"
|
||||
|
||||
/* USER CODE BEGIN 0 */
|
||||
|
||||
/* USER CODE END 0 */
|
||||
@ -164,21 +164,21 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN 1 */
|
||||
#define SEND_COUNT 5
|
||||
volatile uint32_t sendCount = 0;
|
||||
uint8_t data = 16;
|
||||
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
|
||||
{
|
||||
if (huart->Instance == USART1)
|
||||
{
|
||||
sendCount++; // 每次传输完成增加计数
|
||||
|
||||
if (sendCount >= SEND_COUNT)
|
||||
{
|
||||
// 达到指定次数后停止传输
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
//#define SEND_COUNT 5
|
||||
//volatile uint32_t sendCount = 0;
|
||||
//uint8_t data = 16;
|
||||
//void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
|
||||
//{
|
||||
// if (huart->Instance == USART1)
|
||||
// {
|
||||
// sendCount++; // 每次传输完成增加计数
|
||||
//
|
||||
// if (sendCount >= SEND_COUNT)
|
||||
// {
|
||||
// // 达到指定次数后停止传<EFBFBD>?
|
||||
//
|
||||
//
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
/* USER CODE END 1 */
|
||||
|
Reference in New Issue
Block a user