使用USB输出时间和步数同步,一组十个字节,帧头0d ff,前四个字节编码器值,后四个字节是时间ms

This commit is contained in:
wantong
2024-04-26 10:03:33 +08:00
parent ca98807af3
commit c81173d0bd
89 changed files with 19992 additions and 4236 deletions

View File

@ -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 */

View File

@ -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 */

View File

@ -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(); //获取当前系统时间

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */