[STM32L4] 新技能GET,串口空闲中断的使用,用于帧数据接收

[复制链接]
3635|12
 楼主| sjw1716094642 发表于 2016-8-14 15:18 | 显示全部楼层 |阅读模式
昨晚看到一个帖子,讲到了IDLE中断的用法,真是豁然开朗,之前一直不知道这个中断能干什么,在这也感谢 wanglaojii 的分享---《STM32单片机的接收不定长度字节数据的方法》。

随后我便拿NUCLEO-L432一试,加上了DMA,效果杠杠滴。


  1. void Usart_Init(u8 Fck,u32 Bot)
  2. {
  3.   RCC->AHB2ENR|=0x1;
  4.   RCC->APB1ENR1|=RCC_APB1ENR1_USART2EN;
  5.   GPIOA->AFR[1]=0x30000000u;
  6.   GPIOA->AFR[0]=0x00000700u;
  7.   IOset(GPIOA,Px2_TB|Px15_TB,Px2_OB|Px15_OB,2,3,0,0,1);
  8.   
  9.   USARTx->CR1=0;
  10.   USARTx->CR2=0;
  11.   USARTx->CR3=0;
  12.   
  13.   USARTx->BRR=Fck*1000000/Bot;
  14.   USARTx->CR1=0x212c;
  15.   USARTx->CR1&=~0x20;
  16.   USARTx->CR1|=USART_CR1_IDLEIE;             //开启IDLE中断
  17.   USARTx->CR3|=USART_CR3_DMAR;              //接收DMA使能
  18.   USARTx->CR1|=1;
  19.   DMA1_USART2_RX_init(1,(u32)&USART_R_Buf);//DMA配置
  20.   USART2_Start((u32)USART_R_Buf,128);
  21.   NVIC->ISER[1]|=1<<(USART2_IRQn-32);
  22.   NVIC->IP[USART2_IRQn]=0x80;
  23. }


在帧传输过程中由DMA接管,CPU可以安心的做别的事情,但一帧数据(帧长度任意)结束之后,就会触发IDLE中断,此时CPU即可处理该帧数据。
是不是很方便,哈哈。

7LGH@OG%1P(ZA2]Q82OJK~9.png


附上工程(纯寄存器代码): test.rar (700.58 KB, 下载次数: 56)


谢谢阅览~




joketinnle 发表于 2016-8-14 18:22 | 显示全部楼层
不错涨姿势了,,之前一直用回车键,,,
mmuuss586 发表于 2016-8-14 18:25 | 显示全部楼层
谢谢分享
yklstudent 发表于 2016-8-14 18:57 | 显示全部楼层
通信关键还是协议,其它都不是问题
时光深巷已无她 发表于 2016-8-14 19:38 | 显示全部楼层
大神,你知不知道它是怎么触发接收中断的吗
joketinnle 发表于 2016-8-14 20:03 | 显示全部楼层
时光深巷已无她 发表于 2016-8-14 19:38
大神,你知不知道它是怎么触发接收中断的吗

检测 空字符吧
yiyigirl2014 发表于 2016-8-14 22:34 | 显示全部楼层
这个方法还没用过,不知道好用不,学习一下。
 楼主| sjw1716094642 发表于 2016-8-14 22:46 | 显示全部楼层
时光深巷已无她 发表于 2016-8-14 19:38
大神,你知不知道它是怎么触发接收中断的吗

额,IDLE是检测到空闲帧,也就是空字符,就中断。接收中断RXNE是接收数据寄存器不为空,就中断。。
 楼主| sjw1716094642 发表于 2016-8-14 22:48 | 显示全部楼层
yklstudent 发表于 2016-8-14 18:57
通信关键还是协议,其它都不是问题

给协议创造一个良好的环境也是不错的
icecut 发表于 2016-8-15 10:02 | 显示全部楼层
modbus 大家都不用的帧超时,就是类似的设计
zqh1630 发表于 2016-8-15 13:33 | 显示全部楼层
mark一下
80x86abc 发表于 2016-8-26 17:34 | 显示全部楼层
寄存器实现的好
dongnanxibei 发表于 2016-8-26 21:25 | 显示全部楼层
DMA真是个好东西,不过我学的还是不够好,多跟高手们学习学习。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:欢迎加入微控制家园,讨论微控制技术:群号 258891985

24

主题

302

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部