USART发送与接收无意识中断嵌套

2016-10-10来源: eefocus关键字:USART  发送与接收  无意识中断嵌套
01 void USART1_IRQHandler(void)
02 {
03    static u8 i;
04    const u8 BufferSize = 20;
05    static u8 Counter = 0, index = 0;
06    static u8 RxBuffer[BufferSize];
07    static u8 TxBuffer[BufferSize];
08    
09    if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断
10    {
11        RxBuffer[Counter] =  USART_ReceiveData(USART1);
12            Counter++;//不会出错
13        if (0x0A == RxBuffer[Counter - 1] && 0x0D == RxBuffer[Counter - 2])
14        {
15            for (i = 0; i < Counter - 1; i++)
16                TxBuffer[i] = RxBuffer[i];
17            Counter = 0;
18            USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
19        }
20        //Counter++; 发送中断后,将导致RxBuffer[0] == RxBuffer[1],
21 
22        //因为当打开USART_IT_TXE中断后,将立即触发发送中断,形成中断嵌套,而发送中断程序为完毕后将继续执行此行。
23 
24    }
25 
26    if (USART_GetITStatus(USART1, USART_IT_TXE) != RESET)//发送中断
27    {
28        USART_SendData(USART1, TxBuffer[index++]);
29        if (index == i)
30        {
31            index = 0;
32            USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
33        }
34    }
35 }

关键字:USART  发送与接收  无意识中断嵌套

编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/article_2016101030284.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32的时钟树解析
下一篇:STM32 RTC日历程序

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

有关STM32 外设USART 的一个小问题

今天在调试USART 时,偶然发现了USART 数据寄存器状态是可以被打断的,即数据A 在发送过程中当出现了其他的数据寄存器请求B 时,该数据A 的发送会被中断,然后A 不能发送出来,而B 会被正常发送。
发表于 2019-07-19
有关STM32 外设USART 的一个小问题

STM32CubeMX学习笔记4:printf( )重定向到USART串口输出(参考官方例程)

MCU:STM32F103ZET6IDE:  MDK-ARM V5 +STM32CubeMX5.0.0串口调试助手:SSCOM3.2功能描述:USART1收到PC机发来的数据后原封不动的返回给PC机显示,但是C语言中printf函数默认输出设备是显示器,要使用printf输出到串口,需要将fputc里面的输出指向串口,这一过程就叫重定向。需要配置的只有USART1,配置过程非常简单。一. 在 Pinout&Configuration---System Core中:1. 首先设置时钟RCC的HSE(外部高速时钟)为晶振模式:Crystal/ceramic Resonator2. 设置系统SYS的Debug
发表于 2019-07-18
STM32CubeMX学习笔记4:printf( )重定向到USART串口输出(参考官方例程)

STM32常用通信——USART,IIC,SPI,CAN

, CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。数据传输:SCL高电平时,SDA数据写入,所以要变化SDA值,需要在SCL低电平时。USART通过定时器产生,确定波特率,一般8位,起始,停止各一位,无奇偶校验位,串行通信,RX,TX
发表于 2019-07-11
STM32常用通信——USART,IIC,SPI,CAN

STM32小白入门(第六天)-------串口通信

今天要讲的是串口通信,个人觉得挺重要的,以后USART、蓝牙通信,485等等都要用到串口,面试官也喜欢问一些串口的问题,比如问你串口参数,数据位几位,波特率多少,还会问你怎样设置串口等等。一、串口概述1. 定义串口通信是一种设备间非常常用的串行,以比特位的形式发送或接收数据,电子工程师经常使用这种方式来调试数据。2. 开发板硬件用于串口跟PC相连的时候有以下注意事项:A. 使用到usb转串口,所以得安装驱动B. 跳线帽要进行短接二、程序设计1、设置引脚功能复用 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能GPIOA时钟
发表于 2019-07-10
STM32小白入门(第六天)-------串口通信

使用STM32hal库usart的接收中断分析及出现部分问题的解决

最近开始使用ST的hal库,这个库相较于之前的标准库,优缺点兼具吧,hal库封装了更多底层的细节,我们可以很轻易的实现我们需要的功能,但是由于封装了太多的细节,导致一旦出问题,你就很难发现问题,内部调用的复杂让你觉得懵逼。(一)hal库接收中断的分析这几天在使用hal库的USART,其中用到的是接收中断,官方推荐的使用接收中断的方式是:在初始化函数上面先开启接收中断(这里就不介绍串口的配置,网上一大推,我就不给世界增加无谓的存储量了),开启的函数如下:HAL_UART_Receive_IT(&huart2,(uint8_t*)aRxBuffer, 1);//该函数会开启接收中断:标志位UART_IT_RXNE,并且设置接收
发表于 2019-07-09

STM32CUBE HAL库 关于串口usart收发的一个问题

最近项目中遇到了一个问题,因为开始用freertos,然后想加入串口收发功能。打印正常,但是加入接收中断后,开始出bug,最后锁定接收中断挂掉了。原因:HAL库的串口接收发送函数有bug,就是收发同时进行的时候,会出现锁死的现象。解决:需要注释掉    HAL_UART_Receive_IT 和 HAL_UART_Transmit_IT 中的 __HAL_LOCK(huart) 函数---------------------------------------------------------------------------------------------------------------------
发表于 2019-07-09

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved