基于
STM32Cubemx创建FreeRTOS,创建UART任务,经过测试发现有以下两个问题:
1、串口波特率问题:
在STM32Cubemx中串口设置如下:
/* USART3 init func
tion */
void MX_USART3_UART_Init(void)
{
huart3.Instance = USART3;
huart3.Init.BaudRate = 115200;
huart3.Init.WordLength = UART_WORDLENGTH_8B;
huart3.Init.StopBits = UART_STOPBITS_1;
huart3.Init.Parity = UART_PARITY_NONE;
huart3.Init.Mode = UART_MODE_TX_RX;
huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart3.Init.OverSampling = UART_OVERSAMPLING_16;
huart3.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
huart3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
if (HAL_UART_Init( huart3) != HAL_OK)
{
Error_Handler();
}
}
主程序中UART任务如下:
void Uart_test_Thread()
{
for(;;)
{
//osDelay(50);
HAL_Delay(100);
printf("Uart_test_Thread runn");
}
}
通过上位机查看串口输出数据,
若波特率设置为115200,则接收数据乱码。
若波特设置为57600,则串口接收数据正常。
这是什么原因呢?
2、系统延时精度问题:
HAL_Delay(100); 经测试,时间系统延时为200ms,与设定延时参数相差2倍。
以上两个问题,有大牛能帮忙解答一下吗,谢谢!