STM32CubeMX在FreeRTOS下使用串口进行数据收发(不定长度)

本文介绍如何在STM32CubeMX中结合FreeRTOS实现串口的不定长数据收发功能。通过使用定时器记录数据,每5ms处理一次,配合标志位和缓冲区,确保数据的正确接收和处理。实验结果验证了方案的有效性。

STM32CubeMX->FreeRTOS+USART接收不定长数据

由于本人做的一个项目功能相对复杂,要求使用操作系统,且项目工程中有很多需要串口操作的外设,所以需要对串口设计不定长的收发功能,裸机跑惯了的孩子就是比较野,一天瞎吉尔弄,现在是不是GG,这里先批评一下自己。为了解决这一问题并做个笔记,就有了这篇博客。

实现思路:
​ 使用串口、定时器记录接收到的数据,每5ms进入一次处理函数(一条数据处理完毕)
​ 使用一个计数位、一个标志位、一个暂存buff
​ 标志位置1则认为数据处理完成,将数据打印出来
使用硬件功能:串口3及中断,定时器7及中断
使用操作系统元素:一个互斥量
使能RTOS后会RTOS会强制调用系统时钟,所以在使能了操作系统之后需要将系统时钟换为定时器TIM1

操作步骤

  1. 启动STM32CubeMX并对芯片选型
    主要设置

    1. 串口3及中断使能,115200,8,None,1
    2. 定时器7及中断使能,预分频9000-1,自动重载50-1(时钟树APB1、2为90MHz)
    3. SYS时钟源设为定时器1
    4. 使能FreeRTOS,创建1个串口任务、创建1个互斥量
    5. 使能两个GPIO输出驱动LED
      以上都清楚的大佬转到代码功能实现继续
  2. 使能RCC时钟源为外部时钟


3. 设置SYS调试方式为串口,时钟源改为定时器1


4. 设置时钟树,是APB1、2为90MHz,或者自行设定,在后面定时器工作会用到

5. 使能串口3,并启用串口3中断,串口3设置为115200,8Bit,None,1(不知道什么意思的就没有必要看下去了)

在这里插入图片描述
6. 使能定时器7,并使能中断,定时器预分频系数与之前的90MHz相关,需要通过预分频系数和自动重载值将定时时间设为5ms【200Hz】,不会算的看我定时器博客(这里我用了一个不常用的定时器,用哪个都可以,只要注意好定时器隶属哪根时钟线就行)

在这里插入图片描述
7. 使能FreeRTOS并创建一个串口任务和一个二值量(二值信号量用于串口数据接收完成后进入串口任务)

在这里插入图片描述
在这里插入图片描述
8. 设置两个IO输出作为一个可视化依据

在这里插入图片描述
9. 项目命名、选择使用的程序编辑软件我的是MDK_ARM V5、分离.c.h文件,点击右上角GENERATE CODE生成工程
在这里插入图片描述

  1. 打开项目,先编译没有错误之后再进行修改

代码功能实现

  1. 首先在usart.c文件对串口3进行printf函数重定义,使串口3可用printf函数输出

    内容加入到/* USER CODE BEGIN 0 */框架内

    /* USER CODE BEGIN 0 */
    /********************************************************************************/
    #include "stdio.h"
    //加入以下代码,支持printf函数,而不需要选择use MicroLIB	  
    //#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)	
    #if 1
    #pragma import(__use_no_semihosting)             
    //标准库需要的支持函数                 
    struct __FILE 
    {
         
          
    	int handle; 
    }; 
    
    FILE __stdout;       
    //定义_sys_exit()以避免使用半主机模式    
    void _sys_exit(int x) 
    {
         
          
    	x 
评论 37
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值