历史上的今天
返回首页

历史上的今天

今天是:2024年12月10日(星期二)

正在发生

2018年12月10日 | stm32F030C8单片机串口利用USART_IT_IDLE接收完整的一帧

2018-12-10 来源:eefocus

USART_IT_RXNE寄存器是在没接收到一个字节时产生中断,而USART_IT_IDLE寄存器是在接收到完整一帧后产生中断,即接收完一个字节在一个字节的时间内再无接收的话就会产生中断


下面是源码:


void USART1_Config(void)

GPIO_InitTypeDef GPIO_InitStructure;  

USART_InitTypeDef USART_InitStructure; //定义串口初始化结构体

NVIC_InitTypeDef NVIC_InitStruct;

  

RCC_AHBPeriphClockCmd(USART1_GPIO_RCC, ENABLE); //使能GPIOA的时钟

RCC_APB2PeriphClockCmd(USART1_RCC, ENABLE);//使能USART的时钟

GPIO_PinAFConfig(USART1_GPIO_PORT, USART1_TX_GPIO_PinSource, GPIO_AF_1);//配置PA9成第二功能引脚  TX

GPIO_PinAFConfig(USART1_GPIO_PORT, USART1_RX_GPIO_PinSource, GPIO_AF_1);//配置PA10成第二功能引脚 RX 


/*USART1_TX ->PA9 USART1_RX ->PA10*/   

GPIO_InitStructure.GPIO_Pin = USART1_TX|USART1_RX;   //选中串口默认输出管脚

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //定义输出最大速率

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//定义管脚9的模式

GPIO_Init(USART1_GPIO_PORT, &GPIO_InitStructure); //调用函数,把结构体参数输入进行初始化    


/*串口通讯参数设置*/

USART_InitStructure.USART_BaudRate = UART1_BaudRate;//9600; //波特率

USART_InitStructure.USART_WordLength = USART_WordLength_8b; //数据位8位

USART_InitStructure.USART_StopBits = USART_StopBits_1;  //停止位1位

USART_InitStructure.USART_Parity = USART_Parity_No;   //校验位 无

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无流控制

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;   //使能接收和发送引脚


USART_Init(USART1, &USART_InitStructure);

    

//USART_ClearFlag(USART1,USART_FLAG_TC);    

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);

USART1->ICR |= 1<<4; //必须先清除IDLE中断,否则会一直进IDLE中断

USART_Cmd(USART1, ENABLE);

    

    

/* USART1的NVIC中断配置 */

NVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn;

NVIC_InitStruct.NVIC_IRQChannelPriority = 0x02;

NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStruct);    

}


/**

* @file USART1_IRQHandler

* @brief USART1中断处理

* @param 无

* @retval 无

*/

void USART1_IRQHandler(void)

{

uint32_t temp = 0;

if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)

{

//USART_SendData(USART1,USART_ReceiveData(USART1));

if (uart_recv[UART_1].count < UART_BUF_LEN)

{

//uart_recv_flag = 1;

uart_recv[UART_1].recv_buf[uart_recv[UART_1].count] = USART_ReceiveData(USART1);

uart_recv[UART_1].count++;

}

while (USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);

}

if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET)

{

USART1->ICR |= 1<<4;

uart_recv_flag = 1;

UART_send(USART1, "hello", sizeof("hello"));

}


注意F0芯片的清除中断的方法是用ICR寄存器,在使能中断之后就要立即清除一次中断否则会不停的进入中断


推荐阅读

史海拾趣

Crowd Supply公司的发展小趣事

在Crowd Supply平台上线不久,一家专注于智能家居设备的初创公司选择在这里发起众筹。这个项目凭借其独特的设计和前瞻性的功能,迅速吸引了大量关注。经过一段时间的筹备和宣传,该项目成功筹集到了所需的资金,并顺利进入了生产阶段。这一成功案例不仅为Crowd Supply赢得了良好的口碑,也为其后续的发展奠定了坚实的基础。

EZchip Technologies Ltd公司的发展小趣事

随着技术的不断成熟和市场的认可,EZchip开始寻求更广阔的市场空间。公司通过与全球知名通信设备制造商建立合作关系,将其产品应用于各类网络设备和解决方案中。同时,EZchip还积极参与国际标准制定和行业交流活动,不断提升品牌影响力。通过市场拓展和合作,EZchip的产品逐渐覆盖了全球多个国家和地区,成为了网络通信行业的重要参与者。

Boundary Devices公司的发展小趣事

近年来,电子行业面临着诸多变革和挑战,如物联网的快速发展、人工智能的崛起等。面对这些变革,Boundary Devices积极调整战略,加强在物联网和人工智能领域的研发投入,推出了一系列符合市场趋势的新产品。同时,公司还加强与高校和研究机构的合作,共同推动电子行业的创新与发展。

Andon Electronics公司的发展小趣事

为了进一步扩大市场份额,Boundary Devices积极实施国际化战略。公司通过与全球各地的合作伙伴建立合作关系,将产品推向国际市场。同时,公司还积极参加国际电子展会和技术交流活动,与全球同行进行深入的交流与合作,不断提升公司的国际影响力。

Altera (Intel)公司的发展小趣事

近年来,电子行业面临着诸多变革和挑战,如物联网的快速发展、人工智能的崛起等。面对这些变革,Boundary Devices积极调整战略,加强在物联网和人工智能领域的研发投入,推出了一系列符合市场趋势的新产品。同时,公司还加强与高校和研究机构的合作,共同推动电子行业的创新与发展。

承兴(CX)公司的发展小趣事

1996年,承兴公司在香港成立,并迅速设立了亚洲总部。起初,公司专注于电子产品的代理和销售,凭借其敏锐的市场洞察力和高效的供应链管理能力,承兴逐渐在亚洲市场崭露头角。通过与宝洁中国、百事中国等知名品牌建立合作关系,承兴获得了稳定的供应链资源和市场份额。

问答坊 | AI 解惑

数据采集资料

数据采集,大家多交流问题,多提问!…

查看全部问答>

什么是单片机?单片机有什么用?

单片机又称单片微控制器]它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与 ...…

查看全部问答>

请高手解惑: 在wince5.0下如何读AD卡采集的数据...

用pc104 跑wince5.0,我现在有一块AD卡,用来采集传感器传回的数据,不知道如何才能采集到啊? 用不用编驱动程序啊?直接读地址行不行啊?请高手指点一下啊,最好有原代码参考一下啊,十分感谢啊!…

查看全部问答>

To 一个简单的提问

我现在想开发一款USB驱动程序,我目前 的操作系统是Win2003,请问使用win2003DDK开发的驱动程序,能够在WIN2000及XP上使用吗?DDK有什么要求吗?谢谢,见笑了.…

查看全部问答>

遇到这事,你怎么办?

接到了二个offer,一个是作电子词典嵌入式开发,一个是作linux计费开发,现在不知去哪个好? 我以前的工作是在linux下的开发,但我有很想往嵌入式那边尝试,但现在不知道作电子词典开发有没有前途?因为那家公司的电子词典的操作系统不是linux,也不 ...…

查看全部问答>

安捷伦推出业界首个用于示波器的GDDR5 一致性测试工具

2010 年 8 月 19 日,北京――安捷伦科技公司(NYSE: A)宣布,推出业界首个用于示波器的 GDDR5(图形双倍数据速率第五版)一致性测试应用程序包和 GDDR5 球形栅格阵列(BGA)探头。新工具将帮助工程师更快地启动和调试 GDDR5 系统,高效地确定 GDD ...…

查看全部问答>

基于51单片机的函数信号发生器资料总汇

基于51单片机的函数信号发生器资料总汇…

查看全部问答>

困扰我多久的问题,望高手解答

下面一个问题,已经困扰我很久了,一直找不到罪魁祸首,希望有高手帮我解答,非常感谢! 问题背景: 1.此项目为BLDC电机供电,提供310V,15V,GND,电机的VSP与FG由其他控制板输出或接收 2.附件原理图只是电源部分的简要示意图,非完整原理图, ...…

查看全部问答>

IMP813L

那位大哥大姐用过IMP813L看门狗芯片啊,求帮助,求解脱。 WDI喂狗信号都放软件延时函数里了(WDI = ~WDI),时间绝对小于1.6秒,为什么还是产生复位信号,RESET变高电平啊? 真心急!!!!!!!!!!!!!!!!!!…

查看全部问答>

会电机控制的都进来

本帖最后由 liuming759 于 2014-1-13 15:56 编辑 电机控制的朋友请赐教问题如下: 1.他励电机的控制需要注意哪些方面?如何发挥他励电机的最大性能 2.电机控制方面程序的框架最好该如何搭接? 3.如果说是F28035的EPWM模块,该如何设置合适 ...…

查看全部问答>