STM32
直播中

欲望都市

10年用户 953经验值
擅长:可编程逻辑
私信 关注
[问答]

基于STM32Cubemx创建FreeRTOS,创建UART任务遇到的两个问题求解

基于STM32Cubemx创建FreeRTOS,创建UART任务,经过测试发现有以下两个问题:
1、串口波特率问题:
     在STM32Cubemx中串口设置如下:
/* USART3 init function */

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倍。

以上两个问题,有大牛能帮忙解答一下吗,谢谢!


回帖(2)

王雪

2024-5-10 09:45:53
看看时钟配置是否正常
举报

王桂英

2024-5-10 17:12:44
在STM32Cubemx中创建FreeRTOS和UART任务时,可能会遇到一些问题。根据您提供的信息,这里有两个问题需要解决:

1. 串口波特率问题

您已经在STM32Cubemx中设置了USART3的波特率为115200。但是,如果您发现波特率不正确,可以尝试以下步骤来解决这个问题:

步骤1:检查时钟配置
确保您的系统时钟配置正确,因为波特率是基于系统时钟计算的。在STM32Cubemx中,您可以在“System Core”选项卡中找到时钟配置。

步骤2:检查USART初始化函数
确保您的USART初始化函数(MX_USART3_UART_Init)在FreeRTOS任务中被正确调用。您可以在任务的初始化代码中添加一些调试信息,以确保函数被调用。

步骤3:检查串口通信线
确保您的STM32开发板的USART3_TX和USART3_RX引脚与外部设备正确连接。

2. UART任务问题

您没有具体说明UART任务遇到的问题,但我将提供一些建议来帮助您解决可能的问题:

步骤1:确保FreeRTOS配置正确
在STM32Cubemx中,确保您已经正确配置了FreeRTOS。在“Middlewares”选项卡中,选择“FreeRTOS”并根据您的需求进行配置。

步骤2:创建UART任务
在FreeRTOS中,创建一个新的任务来处理UART通信。您可以使用xTaskCreate或xTaskCreateStatic函数来创建任务。确保为任务分配足够的堆栈空间和优先级。

步骤3:处理UART中断
为了在FreeRTOS中处理UART接收和发送,您需要配置UART中断。在STM32Cubemx中,您可以在“NVIC”选项卡中配置USART3的中断优先级。然后,在您的代码中,实现UART中断处理函数(例如:HAL_UART_RxCpltCallback)。

步骤4:调试和优化
如果UART任务仍然存在问题,您可以使用调试工具(如ST-Link)来检查代码的执行情况。此外,优化您的代码以减少任务切换和中断响应时间。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分