stm32的串口中断

void USART1_IRQHandler(void)                                                              //串口中断
{
    if(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET)           //USART1接收中断,,,
    {    
        uart1_rx_buf[uart1_rx_RecvIndex] = USART1->DR;
        uart1_rx_RecvIndex++;
        if(uart1_rx_RecvIndex > 3)
        {
             uart1_rx_RecvIndex = 4;
             Uart1_RS232_SendString(uart1_rx_buf,4);
        }
        //uart1_rx_RecvOvertimeCnt = 0;
        //uart1_rx_RecvFlag = 1;
    }

if(USART_GetITStatus(USART1,USART_IT_TXE) != RESET)               //USART1发送中断
    {
        if(uart1_tx_SendIndex < uart1_tx_SendLength)              
        {
            USART1->DR = uart1_tx_buf[uart1_tx_SendIndex]&0x01FF;
            uart1_tx_SendIndex++;
        }
        else
        {
            uart1_tx_SendIndex = 0;            
            USART_ITConfig(USART1, USART_IT_TXE, DISABLE);         //关闭发送中断        ,,, 这种方式是判断 寄存器是否为空,,,为空就会进入中断,,,,

//所以用完之后就关中断   ,,,至于它的打开,,是在主函数中进行的....
        }
    }
}

原文地址:https://www.cnblogs.com/chulin/p/9055361.html

时间: 2024-10-13 23:22:07

stm32的串口中断的相关文章

STM32串口中断的一些资料

在研究STM32串口接收发送中断的时候找到不少不错的资料,现在备份在这里.以供自己查阅,以及方便其他人. TC ====TXE 顺便预告下最近会写个有关串口处理数据的帖子,从查询和中断方面以及数据处理的方式,从队列以及FIFO方面写起. SECTION 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 /* 调试STM32串口过程中发现一个奇怪的问题,

STM32串口中断实例二

int main(void) { uint8_t a=0;//LED高低电压控制 /* System Clocks Configuration */ RCC_Configuration(); //系统时钟设置 /*嵌套向量中断控制器 说明了USART1抢占优先级级别0(最多1位) ,和子优先级级别0(最多7位) */ NVIC_Configuration(); //中断源配置 /*对控制LED指示灯的IO口进行了初始化,将端口配置为推挽上拉输出,口线速度为50Mhz.PA9,PA10端口复用为串

STM32的串口采用DMA方式接收数据测试(转)

STM32的串口采用DMA方式接收数据测试 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.   参考链接:http://www.amobbs.com/forum.PHP?mod=viewthread&tid=5511863&highlight=dma%E6%8E%A5%E6%94%B6   环境: 主机:WINXP 开发环境:MDK4.23 MCU:STM32F103CBT6 说明: 串口可以配置成用DMA的方式接收数据,不过DMA需要定长才

STM32的USART中断死循环,形成死机。

直接说重点:我用的是 STM32F103 芯片 USART2_IRQHandler 总是中断,程序死循环. 1.出现问题: 原程序的中断处理程序是: void USART2_IRQHandler(void){  u8 key = 0;  USART_ClearFlag(USART2,USART_FLAG_TC ); //清除中断标志  if(USART_GetITStatus(USART2,USART_IT_RXNE)!=Bit_RESET)//检查指定的usart是否发生了中断  {     

Stm32L0串口中断接收使用

最新在做LoRa的项目,使用的是STM32L072和SX1276,需要做一个串口透传模块,刚开始做demo的时候不考虑功耗,所以串口发送和接收直接使用下列函数执行: HAL_UART_Transmit(&Sensor_UartHandle,(unsigned char *)&readcommand, sizeof(vcom_read_command_t), VCOM_START_DELAY); HAL_UART_Receive(&Sensor_UartHandle,(unsigne

关于STM32 USART(串口)发送数据丢失第一帧的真实原因探索

自我介绍 为什么要写个自我介绍?俗话说,光说不练假把式,光练不说傻把式, 因为本人一直很自负,感觉什么东西都可以很快上手(当然非对口专业知识要求高的技能除外),如果我不把这自负表现出来,感觉会憋出内伤. 本人于2015年毕业于电子科技大学,开始的理想是进入一家国外的游戏公司,但理想很丰满,现实很骨感,给育碧.2k Game.Gameloft.EA都投了简历,但都被无情pass掉了(在此吐槽一下,这些公司真的是想在校园里招本科生吗?明明是研究生的计算机图形学却成了这些公司对本科生的要求).后来毕业

STM32F429基于CUBEMX的串口中断接收

今天要来介绍一下HAL库的串口中断使用方法 首先打开CUBEMX,新建一个STM32工程,博主建立的是F429工程,然后在图形界面中打开一个USART,这里我们使用USART1. 然后进入配置configguration 基本的参数都不用修改,在NVIC中,大概中断使能 然后生成工程即可,打开工程文件.这里要解释一下串口中断接收: 关于串口接收中断 用CUBEMX生成的工程文件中,先开启接收中断使能 __HAL_UART_ENABLE_IT(uartHandle, UART_IT_RXNE);并

STM32之串口通信

一.RS232通信协议 1.概念 个人计算机上的通讯接口之一,由电子工业协会(Electronic Industries Association,EIA) 所制定的异步传输标准接口. 2.电气特性 逻辑1(MARK): -3V--15V 逻辑0(SPACE):  +3-+15V 3.接口 实现全双工异步通信只需要三根线:RX.TX和GND. 二.常见COMS电平转RS232电平的芯片--MAX3232 1.逻辑输入与逻辑输出特性 2.RS232接口端输入特性 3.RS232接口端输出特性 三.S

stm32的串口接收字符串以十六进制数

#include "pbdata.h" uint8_t TxBuffer1[] = "USART Interrupt Example: This isUSART1 DEMO"; uint8_t RxBuffer1[],rec_f,tx_flag; volatile uint8_t TxCounter1 = 0x00; volatile uint8_t RxCounter1 = 0x00; uint32_t Rec_Len; int main(void) { u8 a