stm32 USART_IT_IDLE中断 一帧数据

Easter79
• 阅读 619

USART_IT_IDLE中断,是串口收到一帧数据后,发生的中断。也可以叫做一包数据

USART_IT_IDLE和USART_IT_RXNE区别
当接收到1个字节,会产生USART_IT_RXNE中断
当接收到一帧数据,就会产生USART_IT_IDLE中断

清中断方法

//USART_IT_RXNE
USART_ClearITPendingBit(USART1, USART_IT_RXNE);

//USART_IT_IDLE
USART1->SR; //先读SR寄存器
USART1->DR; //再读DR寄存器

使用举例

u8 count;
u8 flag;

void uart_init(u32 bound)
{
    ...

    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
    USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);

    ...
}

void USART1_IRQHandler(void)
{
    u8 r;

    if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
    {
        USART_ClearITPendingBit(USART1, USART_IT_RXNE); //只USART_ReceiveData也可以

        //r = USART_ReceiveData(USART1);

        count++;
    }
    else if(USART_GetFlagStatus(USART1, USART_FLAG_IDLE) != RESET)
    {
        USART1->SR;
        USART1->DR;

        flag = 1;
    }
}

int main()
{
    while(1)
    {
        if(flag == 1)
        {
            printf("count %d\r\n", count);

            flag = 0;
            count = 0;
        }

        delay_ms(10);
    }
}

实验现象
stm32 USART_IT_IDLE中断 一帧数据

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Easter79 Easter79
2年前
stm32山外虚拟示波器笔记
//串口发送一个字节voidUART_send_byte(u8byte){while(!((USART1ISR)&(1<<7)));USART1TDRbyte;}voiduart_putbuff(uint8_tdata,uint32_t
Wesley13 Wesley13
2年前
STM32使用HAL库DMA+空闲中断实现串口不定长数据接收
STM32使用HAL库DMA空闲中断实现串口不定长数据接收环境:STM32CubeIDESTM32F103RBWIN10HAL库V1.8首先配置串口:!在这里插入图片描述(https://img
Wesley13 Wesley13
2年前
STM32 中断详解
中断,在单片机中占有非常重要的地位。代码默认地从上向下执行,遇到条件或者其他语句,会按照指定的地方跳转。而在单片机执行代码的过程中,难免会有一些突发的情况需要处理,这样就会打断当前的代码,待处理完突发情况之后,程序会回到被打断的地方继续执行。1EXTI控制器外部中断/事件控制器(EXTI)管理了控制器的23个中断/事件线。每
Wesley13 Wesley13
2年前
初探 Objective
作者:Cyandev,iOS和MacOS开发者,目前就职于字节跳动0x00前言异常处理是许多高级语言都具有的特性,它可以直接中断当前函数并将控制权转交给能够处理异常的函数。不同语言在异常处理的实现上各不相同,本文主要来分析一下ObjectiveC和C这两个语言。为什么要把ObjectiveC和
Wesley13 Wesley13
2年前
2.Java 并行程序基础
1.初始线程:线程的基本操作1.新建线程2.终止线程stop造成数据不一致3.线程中断publicvoidThread.interrupt()//中断线程publicbooleanThread.isTnterrup
Stella981 Stella981
2年前
Linux 网络包接收过程的监控与调优
Linux内核对网络包的接收过程大致可以分为接收到RingBuffer、硬中断处理、ksoftirqd软中断处理几个过程。其中在ksoftirqd软中断处理中,把数据包从RingBuffer中摘下来,送到协议栈的处理,再之后送到用户进程socket的接收队列中。!Linux教程(https://oscimg.oschina.net/oscnet/up
Stella981 Stella981
2年前
Linux并发与同步专题
并发访问:多个内核路径同时访问和操作数据,就有可能发生相互覆盖共享数据的情况,造成被访问数据的不一致。临界区:访问和操作共享数据的代码段。并发源:访问临界区的执行线程或代码路径。在内核中产生并发访问的主要有如下4种:中断和异常:中断发生后,中断处理程序和被中断的进程之间有可能产生并发访问。中断<被中断的线程软中断和ta
九路 九路
1年前
go并发模式二:任务的控制
任务的控制任务的控制,主要涉及到以下几个方面非阻塞等待超时机制任务中断/退出优雅退出1非阻塞等待go//非阻塞等待,收到数据,返回数据,以及true,收不到数据,返回"",falsefuncnonBlockWait(cchanstring)(string,bool)select//如果没有收到值,会阻塞在此casem:<c:returnm,true//上面的case是阻塞的,收不到值就会等待,但是加了default,就变成非阻塞了//因为上面的
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k