完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
STM32 串口地址匹配唤醒接收中断
在串口通讯过程中为了减轻MCU的负担,设置地址匹配接收唤醒中断,就是只有接收到特定的数据才会唤醒接收中断,下面详细介绍stm32如何一步步实现这个功能的。 1、串口初始化 void USART3_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; /* 使能 USART3 时钟*/ RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//使能外设时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 ; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); /* USART3 使用IO端口配置 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入 GPIO_Init(GPIOB, &GPIO_InitStructure); /* USART3 工作模式配置 */ USART_InitStructure.USART_BaudRate = 115200; //波特率设置 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(USART3, &USART_InitStructure); //初始化USART3 USART_SetAddress(USART3, 0XA5);//设置匹配地址0XA5 USART_WakeUpConfig(USART3, USART_WakeUp_AddressMark);//唤醒配置:地址匹配唤醒 USART_ReceiverWakeUpCmd(USART3, ENABLE);//使能接收唤醒 /*使能串口3的接收中断*/ USART_ITConfig(USART3, USART_IT_RXNE | USART_IT_ERR, ENABLE); USART_Cmd(USART3, ENABLE);// USART3使能 } 2、串口中断优先级配置 /*USART3 接收中断配置 */ void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; /* Configure the NVIC Preemption Priority Bits */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); /* Enable the USART1 Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } 3、中断服务函数 unsigned char data=0; void USART3_IRQHandler(void) { if(USART_GetFlagStatus(USART3, USART_IT_ORE) != RESET) { USART_ClearFlag(USART3, USART_IT_ORE);//清除溢出标志位 } if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) { USART_ClearFlag(USART3, USART_FLAG_RXNE); USART_ClearITPendingBit(USART3, USART_IT_RXNE); /* Read one byte from the receive data register */ data = USART_ReceiveData(USART3); } } |
|
|
|
只有小组成员才能发言,加入小组>>
3308 浏览 9 评论
2988 浏览 16 评论
3490 浏览 1 评论
9049 浏览 16 评论
4083 浏览 18 评论
1167浏览 3评论
601浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
592浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2329浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1892浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 09:54 , Processed in 1.245031 second(s), Total 78, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号