110、STM32CubeMX串口DMA发送重定义

本文详细介绍了如何使用STM32CubeMX配置FreeRTOS和串口USART,包括任务创建、信号量设置、串口参数配置以及DMA传输的设定。此外,还涉及了bsp和app文件的编写,为实际应用提供基础。
摘要由CSDN通过智能技术生成

写在前面

  1. 本章主要分为三个部分:CubeMX配置、bsp驱动编写、应用层代码编写
  2. 详细的CubeMX配置,包含FreeRTOS任务的创建、信号量的创建、以及串口底层的创建
  3. 新建bsp文件夹及bsp_uart文件,在此文件中编写串口初始化及接口函数
  4. 新建app文件夹及app_log文件,在此文件夹编写任务函数。为后续教程做铺垫和当前教程测试
  5. stm32历史文章:https://blog.csdn.net/JiaLu0216/article/details/115471382

CubeMX FreeRTOS配置

  1. 打开CubeMX新建工程后选择Middleware->FREERTOS选项
  2. 在Mode选择框中Interface种选择CMSIS_V2,这个选项主要选择CubeMX自定义接口,CMSIS_V2版本后面会方便很多
  3. 在Configuration对话框中选择Config parameters页,配置其中TICK_RATE_HZ为1000,这个参数配置任务调度的周期,默认为1000,可不修改
    在这里插入图片描述
  4. 在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 :是否采用外部内存分配堆栈,一般采用系统内部总堆进行分配
    在这里插入图片描述
  5. 在Configuration对话框中选择Timers and Semaphores页,在Binary Semaphores任务框中点击添加按钮进行添加任务
    1、Semaphore Name :信号量名字
    2、Allocation :是否采用外部内存分配堆栈,一般采用系统内部总堆进行分配
    在这里插入图片描述

CubeMX USART配置

  1. 根据自己板子选择对应串口,本例程采用串口2,选择Connectivityt->USART2选项
  2. 选择模式为异步模式,在Mode选择框中选择MODE :Asynchronous
  3. 在Configuration选择框中选择GPIO Settings页,检测配置的外部GPIO口是否正确,否则在右侧芯片图进行重新选择引脚
    在这里插入图片描述
  4. 在Configuration选择框中选择Parameter Settings页,在Basic Parameters下拉框中进行配置参数
    1、Baud Rate :设置串口波特率
    2、Word Length :设置数据位(如果有奇偶校验位时,此选项必须包含奇偶校验位,等于说在数据位+1)
    3、Parity :选择奇偶检验位
    4、Stop Bits :选择停止位
    在这里插入图片描述
  5. DMA配置,在Configuration选择框中选择DMA Settings页,选择添加按钮,上方会添加一个对话框,在对话框中选择USART2_TX
  6. DMA模式选择正常模式Mode :Normal,地址子增选择内存Increment Address :Memory
  7. 传输数据大小选择字节,Data Width :Byte
    在这里插入图片描述
  8. 中断配置,在Configuration选择框中选择NVIC Settings页,中断接面选择DMA中断,串口中断打开
    在这里插入图片描述

CubeMX 内部计数器时钟源配置

在这里插入图片描述

bsp文件编写

  1. 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 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值