培训学校网站建设,阿里主机wordpress,wordpress 快递查询 插件,自有服务器 做网站一、Uart串口接收空闲中断----详解
首先介绍串口通信的数据传输方式#xff0c;这样后面的Uart串口空闲中断能更好的理解。
Uart串口通信----数据传输方式
串口通信的数据由发送设备通过自身的TXD接口传输到接收设备得RXD接口。 一个字符一个字符地传输#xff0c;每个字符…
一、Uart串口接收空闲中断----详解
首先介绍串口通信的数据传输方式这样后面的Uart串口空闲中断能更好的理解。
Uart串口通信----数据传输方式
串口通信的数据由发送设备通过自身的TXD接口传输到接收设备得RXD接口。 一个字符一个字符地传输每个字符一位一位地传输并且传输一个字符时总是以 起始位 开始以 停止位 结束字符之间没有固定的时间间隔要求。
每一个字符的前面都有一位 起始位 (低电平)字符本身由8位数据位组成接着字符后面是一位 校验位 (检验位可以是奇校验、偶校验或无校验位)最后是一位或一位半或二位 停止位 停止位后面是不定长的空闲位停止位和空闲位都规定为高电平。具体如下图所示。 实际传输时每一位的信号宽度与波特率有关波特率越高宽度越小在进行传输之前双方一定要使用同一个波特率设置。
Uart串口通信----接收空闲中断
一般我们串口接收的时候都是使用的RXNE接收数据寄存器非空中断。 接收到一个字节数据就进入一次中断然后把它放入缓存但是数据量很大的时候会频繁进入中断影响单片机的时效性。
这时我们就可以使用 IDLE 空闲线路检测中断当接收完一个字符后在下一个字节时间内收到的全都是高电平在一个字节时间内没有收到下一个字节的低电平起始位那么产生空闲中断。
一帧完整字符串数据内的字符是连续发送的这样发送的字符之间的时间间隔通常是很小的比一个字节时间小。 当产生串口空闲中断时就说明这一帧数据接收完成。
二、使用STM32CubeMX----新建Uart串口接收空闲中断工程
前言
本次实验以 STM32F407VET6 芯片为MCU使用 25MHz 外部时钟源。 串口通信引脚 与 MCU引脚 对应关系如下
串口通信引脚MCU引脚TXPA9RXPA10
步骤1打开 STM32CubeMX 软件
具体 STM32CubeMX 界面如下 步骤2选择 从MCU开始我的项目 步骤3选择MCU芯片
我们本次实验选择 STM32F407VET6 芯片做 MCU。
进入工程编辑具体界面如下 步骤4设置烧写方式为 SWD模式
这一步必须选择一种烧写方式否则烧写一次程序后芯片中就没法再次烧写程序了。需要硬件重启才可以重新烧写程序。
STM32烧写程序连接方式详解 步骤5设置时钟源
设置外部晶振为芯片系统时钟源。
步骤6Uart 串口配置
设置参数
串口设置参数波特率115200 Bits/s数据长度8 bit奇偶校验无停止位1位数据方向接收和发送使能使能中断 步骤7设置时钟
STM32F407 时钟最大频率为 168M
步骤8项目编辑 步骤9代码生成编辑 步骤10点击 GENERATE CODE 生成代码 新建的工程已经生成接下来就是对工程代码的编辑。
三、使用keil5----编辑Uart串口空闲中断
想要使用keil5打开工程需要电脑先安装 keil5编译环境具体操作流程。 可以点击下方文章链接Keil5编译环境搭建流程
步骤1使用keil5打开工程
点击工程文件中的MDK-ARM 文件 打开keil5工程
步骤2用户代码编辑位置
用户代码 要写在 USER xxxx BEGIN xxx 和 USER xxxx END xxx 之间。 这样下次使用 STM32CubeMX 重新生成代码后自己写的代码不会被删除。 步骤3使用到的HAL库函数
//串口空闲中断模式接收
HAL_UARTEx_ReceiveToIdle_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
//串口空闲中断回调函数
HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size); 步骤4Uart串口接收空闲中断
具体步骤如下
初始化串口。然后在初始化中调用一次接收空闲中断函数HAL_UARTEx_ReceiveToIdle_IT();然后在接收空闲中断回调函数中处理接收数据。回调函数中要调用一次接收空闲中断函数HAL_UARTEx_ReceiveToIdle_IT(); 使得程序可以重新触发接收中断。
代码实现如下
uint8_t Uart1_RX_data[100];//接收数据缓存大小可设void Uart1_IT_Init(void)
{HAL_UARTEx_ReceiveToIdle_IT(huart1, Uart1_RX_data, 100);//调用接收空闲中断
} //接收空闲中断回调函数
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{if(huart-InstanceUSART1){/****处理数据****/HAL_UARTEx_ReceiveToIdle_IT(huart1, Uart1_RX_data, 100);//调用接收空闲中断}
}将接收中断函数HAL_UART_Receive_IT()写到初始化中。 步骤5烧写程序到芯片
具体烧写操作步骤可以查看以下文章有详细的烧写说明。 文章链接 烧写程序(STM32GD32)ST-link V2调试下载器实物和连接方式 烧写程序(STM32GD32)ST-link驱动下载和安装 烧写程序(STM32GD32)Keil5使用ST-link下载程序 资源链接ST-link驱动链接----点击下载