在如今这个需要快速开发设计出产品的时代,模块化的东西越来越方便快捷,在各种模块使用的接口里面串口应该是比较常见和常用的,串口蓝牙模块,串口WIFI模块等等,除此之外串口还常用于和客户产品进行通信中也比较方便,因此一个接收发送数据等功能完善的串口对项目开发来说非常重要。(STM32官网)
在ST发布比较新的系列的ARM芯片中,串口已经非常强大,下面我们就简单测试几个比较常用的功能。
1、接收超时中断+DMA接收不定长数据
如果我们想要用串口接收一段长度不确定的数据,比较常见的做法是空闲中断配合DMA或者自己使用定时器进行一个超时判断来确定一帧长度数据接收完成,除此之外在STM32F7系列中串口有一个Receiver timeout 中断,使用这个接收超时中断配合DMA可以很方便的接收不定长数据。
接收超时中断用于串口在接收到最后一个字符后,在设置的超时时间内没有接收到新的数据便会触发。
uartouttime.png (142.28 KB, 下载次数: 24)
2016-12-10 17:02 上传
接收超时中断的设置超时时间是以串口接收一个bit的持续的时间为单位,这个时间和波特率有关系实际使用中可以根据具体情况进行调整,然后设置超时多少个这样的持续时间才会触发中断。
RTO.png (80.8 KB, 下载次数: 17)
2016-12-10 17:14 上传
接收超时设置和中断回调函数如下
//打开或者关闭串口接收超时
void USART_ReceiverTimeOutCmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
if (NewState != DISABLE)
{
USARTx->CR2 |= USART_CR2_RTOEN;
}
else
{
USARTx->CR2 &= (uint32_t)~((uint32_t)USART_CR2_RTOEN);
}
}
//设置串口接收超时时间
void USART_SetReceiverTimeOut(USART_TypeDef* U