使用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

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