关于STM32串口接收中断中只能接收一个字节()
最近调试STM32的串口接收时发现例程中只能接收一个字节
例程如下:
1 //初始化串口12 void uart_init(u32 bound){3 //GPIO端口设置4 GPIO_InitTypeDef GPIO_InitStructure;5 USART_InitTypeDef USART_InitStructure;6 NVIC_InitTypeDef NVIC_InitStructure;7 8 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //使能USART1,GPIOA时钟9 USART_DeInit(USART1); //复位串口1 10 //USART1_TX PA.9 11 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9 12 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 13 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 14 GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA9 15 16 //USART1_RX PA.10 17 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; 18 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入 19 GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA10 20 21 //Usart1 NVIC 配置 22 23 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; 24 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3 25 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3 26 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能 27 NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器 28 29 //USART 初始化设置 30 31 USART_InitStructure.USART_BaudRate = bound;//一般设置为9600; 32 USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式 33 USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位 34 USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位 35 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制 36 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式 37 38 USART_Init(USART1, &USART_InitStructure); //初始化串口 39 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启中断 40 USART_Cmd(USART1, ENABLE); //使能串口 41 42 } 43 void USART1_IRQHandler(void) //串口1中断服务程序 44 { 45 u8 Res; 46 if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾) 47 { 48 //USART_ClearITPendingBit(USART1,USART_IT_RXNE); 49 Res =USART_ReceiveData(USART1);//(USART1->DR); //读取接收到的数据 50 USART_RX_BUF[buf_index++]=Res; 51 52 } 53 54 } 55 56 57
这是较为普遍的源码例程的写法,用原子的版本改的。这本身没问题,但是,一旦运行,就会发现,只能接收一个字节,后面的都会丢失,调了1天没找到原因,一搜索发现很多类似的情况。
后来正准备改用DMA时偶然找到问题所在,就是这句:
24 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3 25 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3
改为
24 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ; 25 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
后问题解决。
注意,不要在中断中执行发送接收过程,存在中断嵌套的问题,会造成只执行一次的现象。
关于STM32串口接收中断中只能接收一个字节()相关推荐
- STM32移植RT-Thread的串口只能接收一个字节数据的问题
特别值得注意的地方,事先在rtconfig.h里面把#define RT_USING_CONSOLE和#define RT_USING_FINSH都注释掉.
- STM32串口通信中使用printf发送数据配置方法 开发环境 Keil
STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK) 已有 12456 次阅读2011-6-29 23:29 | 在STM32串口通信程序中使用printf发送数据, ...
- 在/proc/devices中只能看见一个,请问是什么原因
在/proc/devices中只能看见一个,请问是什么原因 #include <linux/module.h> #include <linux/types.h> #includ ...
- c语言程序只能有一个源程序文件,下列说法哪个正确?() A.一个程序可以包含多个源文件 B.一个源文件中只能有一个类 C.一个源文件中可以...
下列说法哪个正确?() A.一个程序可以包含多个源文件 B.一个源文件中只能有一个类 C.一个源文件中可以 更多相关问题 [问答题,简答题] 古埃及服饰中时常看到"蛇"." ...
- 嵌入式之串口中断只能收到一个字节
串口中断只能收到一个字节原因排查: 1.中断程序占用时间过长,导致后面的数据到达的时候无法接受. 2.中断清除标志位. 3.串口中断优先级太低,导致中断嵌套.将优先级设为最高.
- 当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式
当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式. 比如 select * from T_Employee where FNumber not in ( select top 5* ...
- FPGA 串口中断_一个严谨的STM32串口DMA发送amp;接收(1.5Mbps波特率)机制
昨天分享的<嵌入式大杂烩读者福利:第一期>大家有去抽奖吗,没抽的可参与抽奖,碰碰运气.我最喜欢抽奖了,还记得前几个月疫情严重时期连抽中了3包口罩,真刺激,哈哈.之后多多安排抽奖,敬请期待. ...
- 串口协议的制定以及串口中怎样接收一个完整数据包的解析
里以串口作为传输媒介,介绍下怎样来发送接收一个完整的数据包.过程涉及到封包与解包.设计一个良好的包传输机制很有利于数据传输的稳定性以及正确性.串口只是一种传输媒介,这种包机制同时也可以用于SPI,I2 ...
- STM32串口发送数据和接收数据方式总结
文章目录 串口发送数据 串口接受数据 串口发送数据 1.串口发送数据最直接的方式就是标准调用库函数 . void USART_SendData(USART_TypeDef* USARTx, uint1 ...
最新文章
- 12 Java面向对象之多态
- 标志寄存器的详细解释
- 判断是否Ajax请求
- gpu云服务器运行游戏_GPU云服务器可以挂载大型游戏吗?
- 公共语言运行库中的程序集-04强命名的程序集
- [gstreamer][001] Seek issues and so on
- java基础—IO流——将一些字符写入到指定硬盘上的目录中去:
- 第八篇:ZTree操作总结
- frontcon函数用不了_MQL4课程——账户信息函数和检测函数
- mysql 利用延迟关联优化查询(select * from your_table order by id desc limit 2000000,20)
- 第五章(1.7)深度学习——常用的八种神经网络性能调优方案
- 自动化学科前沿讲座作业 基于深度学习的工厂人员监测系统设计
- vue + ElementUI + BMap 百度地图实现地图选址定位并获取地址信息
- ubuntu firefox不能播放MP4,ubuntu Firefox flash 浏览器全屏置顶
- 书论51 朱文长《续书断》
- python导出百万数据到excel_使用python将大量数据导出到Excel中的小技巧分享
- 【Eclipse报错】Faceted Project Problem:Target runtime Apache Tomcat v8.0 is not defined.
- 哗哗地照样子写词语_描写哗哗的词语
- [STL乱搞]51 Nod——1573 美丽的集合
- my_RIO实现小车避障
热门文章
- iOS开发- 隐藏状态栏(电池栏)
- Revit二次开发——结构模型构件自动扣减
- ggplot2学习笔记5:工具箱(一)基础图层、标签、注释、群组几何对象、曲面图
- CAS:2379387-10-5;TPE-丙烯酰胺;AIE聚集诱导发光
- 训练自己的词向量模型
- Java Activiti 工作流引擎 springmvc SSM 流程审批 后台框架源码
- 供应链对全球手机市场相当悲观,iPhone出货量将进一步下滑
- 牛掰!阿里大佬用7部分讲明白Web安全攻防 渗透测试(学完可就业)
- 7-15 单继承中的构造函数与析构函数 (10 分)
- 科沃斯擦玻璃机器人使用感受_科沃斯擦玻璃机器人W83S,正在纠结的看过来