stm32串口学习(二)
来源:互联网 发布:jquery源码 on方法 编辑:程序博客网 时间:2024/05/14 22:18
今天继续学习stm32的串口编程(利用库函数)。上次我们说了串口的发送,这次我们说接收。
接收可以用查询的方法,也可以用中断。显然,工程中多用中断的方式,那么就来看看中断接收。
代码其实很简单,基本的配置不变,在上次的基础上加一点(优先级的配置和接收中断的使能)就可以了。
//Usart1 NVIC 配置NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ; //抢占优先级3NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;//子优先级3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//IRQ通道使能NVIC_Init(&NVIC_InitStructure); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启接收中断,这句话是关键
既然开启了接收中断,就有对应的中断服务函数。
void USART1_IRQHandler(void) //串口1中断服务程序{u8 rx_data = 0; //用来保存接收到的字节if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断{rx_data = USART_ReceiveData(USART1);//读取接收寄存器,自动清除中断位RXNE++rx_data;//方便调试,可以在这里打个断点}}这样就实现了最最基本的功能:用键盘发送一个字节,就会进入中断,从寄存器取出这个字节。
需要说明的是:
1. STM32 的发送与接收是通过数据寄存器 USART_DR 来实现的,这是一个双寄存器,包含了TDR和 RDR。当向该寄存器写数据的时候,串口就会自动发送,当收到数据的时候,也是存在该寄存器内。
2. RXNE(接收数据寄存器非空),当该位被置 1 的时候,就是提示已经有数据被接收到了,并且可以读出来了。这时候我们要做的就是尽快去读取 USART_DR,通过读 USART_DR 可以将该位清零,也可以向该位写 0,直接清除。
0 0
- stm32串口学习(二)
- STM32学习笔记(二)------串口实验
- stm32串口学习(一)
- STM32串口实现1-wire(二)
- 串口学习(二)
- STM32学习笔记(串口、IAP)
- STM32学习笔记(串口、IAP)
- STM32串口学习总结(经典)
- STM32学习笔记-串口
- STM32:STM32学习记录4:串口
- STM32-串口实验学习笔记
- 简单学习STM32串口232
- STM32学习之USART串口
- STM32学习——串口
- STM32串口使用心得(二)——串口溢出中断(ORE)
- STM32学习笔记(7):USART串口的使用
- STM32学习笔记(7):USART串口的使用
- stm32学习笔记---串口(原子开发板)
- 工作中的英语积累8
- 20150124 【 Linux-C 函数指针 】 模拟快速排序程序--快排
- Oracle OCP笔记(10)警报日志与跟踪文件
- Cocos2d-x 3.3 动作游戏连续普通攻击判断-改进
- 设置 UILabel 和 UITextField 的 Padding 或 Insets (理解UIEdgeInsets)
- stm32串口学习(二)
- 调整数组的顺序使奇数位于偶数的前面
- 一.Vmware的安装
- 工作中的英语积累9
- consecutive numbers 180
- 在jdbc下利用Oracle的存储过程取得比较复杂的数据集合
- UIEdgeInsetsMake的作用
- NYOJ 371 机器人II【简单题】
- Oracle OCP笔记(11)配置网络环境