写在前面
- 本章主要分为三个部分:CubeMX配置、bsp驱动编写、应用层代码编写
- 详细的CubeMX配置,包含FreeRTOS任务的创建、信号量的创建、以及串口底层的创建
- 新建bsp文件夹及bsp_uart文件,在此文件中编写串口初始化及接口函数
- 新建app文件夹及app_log文件,在此文件夹编写任务函数。为后续教程做铺垫和当前教程测试
- stm32历史文章:https://blog.csdn.net/JiaLu0216/article/details/115471382
CubeMX FreeRTOS配置
- 打开CubeMX新建工程后选择Middleware->FREERTOS选项
- 在Mode选择框中Interface种选择CMSIS_V2,这个选项主要选择CubeMX自定义接口,CMSIS_V2版本后面会方便很多
- 在Configuration对话框中选择Config parameters页,配置其中TICK_RATE_HZ为1000,这个参数配置任务调度的周期,默认为1000,可不修改
- 在Configuration对话框中选择Task and Queues页,在Tasks任务框中点击添加按钮进行添加任务
1、Task Name :任务名字
2、Priority :任务优先级,可根据实际需求进行选择
3、Stack Size(Words):任务的堆栈大小,根据任务实际使用进行配置
4、Entry Function :入口函数,后期使用的任务函数,相当于裸机的main函数
5、Code Generation Option :生成任务函数的方式,一般会选择As weak,选这个可以方便没有编写任务函数时,还有一个弱函数来运行。后期在任务文件夹重写后任务函数后,这个弱函数将会自动省略
6、Parameter :函数入口参数,一般不使用
7、Allocation :是否采用外部内存分配堆栈,一般采用系统内部总堆进行分配
- 在Configuration对话框中选择Timers and Semaphores页,在Binary Semaphores任务框中点击添加按钮进行添加任务
1、Semaphore Name :信号量名字
2、Allocation :是否采用外部内存分配堆栈,一般采用系统内部总堆进行分配
CubeMX USART配置
- 根据自己板子选择对应串口,本例程采用串口2,选择Connectivityt->USART2选项
- 选择模式为异步模式,在Mode选择框中选择MODE :Asynchronous
- 在Configuration选择框中选择GPIO Settings页,检测配置的外部GPIO口是否正确,否则在右侧芯片图进行重新选择引脚
- 在Configuration选择框中选择Parameter Settings页,在Basic Parameters下拉框中进行配置参数
1、Baud Rate :设置串口波特率
2、Word Length :设置数据位(如果有奇偶校验位时,此选项必须包含奇偶校验位,等于说在数据位+1)
3、Parity :选择奇偶检验位
4、Stop Bits :选择停止位
- DMA配置,在Configuration选择框中选择DMA Settings页,选择添加按钮,上方会添加一个对话框,在对话框中选择USART2_TX
- DMA模式选择正常模式Mode :Normal,地址子增选择内存Increment Address :Memory
- 传输数据大小选择字节,Data Width :Byte
- 中断配置,在Configuration选择框中选择NVIC Settings页,中断接面选择DMA中断,串口中断打开
CubeMX 内部计数器时钟源配置
bsp文件编写
- bsp_uart.h代码
#ifndef __BSP_UART_H
#define __BSP_UART_H
#include "main.h"
#define UART2_RX_MAX_LEN 400
#define UART2_TX_MAX_LEN 400
typedef struct
{
uint8_t *tx_data;
}UartHead;
typedef struct
{
UartHead uart2_head;
}BspUartStr;
uint8_t BspUartInit(void);
void