文档介绍:STM32使用DMA;口串口空闲中断接收数据
STM32中,需要用串口接收数据,是使用串口中断来接收数据。但是用这种方法的话, 就要频繁进入串口中断, 然后处理,效率就比较低。于是就想到用 DM麻接收串口数据,这 个STM32也是支持的。但是关键的一点,怎么知道数据接收完毕了呢?如果接收的数据长度 固定,那就好办,直接设置 DMA勺接收数据个数就行了。 但是如果长度不固定了, 那应该怎 么办了?
这个时候,就要用到STM3加串口中提供的另一个好用的东西了, 就是 串口空闲中断。在STM32的串口控制器中,设置了有串口空闲中断,即如果串口空闲, 又开 启了串口空闲中断的话, 就触发串口空闲中断, 然后程序就会跳到串口中断去执行。 有了这 个,是不是可以判断什么时候串口数据接收完毕了呢?因为串口数据接收完毕后, 串口总线
肯定是会空闲的嘛,那这个中断肯定是会触发的了。
USAH1 BRR
, 一 H型11富靖丹£I
还有一个问题,这串口空闲中断是只要串口空闲就会产生吗?其实不是
的,串口空闲中断要触发的话,是要 RXNW被置位后,串口总线空闲才会触发的。所以我
们不用担心,串口数据发送完毕后,会不会触发串口空闲中断了。
1y271 USART中斯瞋像愠
下面用代码来说明。
1、 配置串口。包括设置串口的引脚配置,串口的配置,串口中断的配置,串口的 接收DMA勺配置
void USART_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
// 开启时钟
RCC_APB2PeriphClockCmd(USART_RCC,ENABLE);
// 配置TX端口
= GPIO_USART_TX;
= GPIO_Mode_AF_PP;
= GPIO_Speed_50MHz;
GPIO_Init(GPIO_USART_TYPE,&GPIO_InitStructure);
// 配置RX端口
= GPIO_USART_RX;
= GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIO_USART_TYPE,&GPIO_InitStructure);
// 配置串口模式
= 115200;
= USART_WordLength_8b;
= USART_StopBits_1;
= USART_Parity_No;
US