完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
新手求助大侠:STM32 USART1 能发出数据但进不了接收中断
调试接收中断中,因无法通过才加上查询接收和发送完成中断发现:发送完成中断可以响应, 但接收无论是中断方式还是查询方式都接收不到数据 #include "stm32f10x.h" #include #include "stm32f10x_it.h" //#include #include /** void USART1_Init(unsigned int baut) * @ 函 数 void GPIOx_Init(void) * @ 功 能 GPIO configue * @ 说 明: * 入口参数: * 返回参数: ----------------------------------------------------------------------- */ void USARTx_Config(unsigned int baut) { //波特率 USART1->BRR =(int)72000000/baut; // //控制寄存器 USART1->CR1=0x0000202c; //USART使能UE、接收中断使能RXNEIE、8位数据位、无校验, USART1->CR2=0x00000000; //停止位为00(1位)、 USART1->CR3=0x00000000; } /** * @ 函 数 void GPIOx_Init(void) * @ 功 能 GPIO configue * @ 说 明: * 入口参数: * 返回参数: ----------------------------------------------------------------------- */ void GPIOx_Config(void)//调用库 { GPIO_InitTypeDef GPIO_InitStructure ; //GPIOA_Pin_9配置为输出 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); //GPIOA_Pin_10配置为输入 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOAtiNG; GPIO_Init(GPIOA, &GPIO_InitStructure); } /** * @ 函 数 void VNIC_CONFIG(void) * @ 功 能 GPIO configue * @ 说 明: * 入口参数: * 返回参数: ----------------------------------------------------------------------- */ void VNIC_Config(void) //嵌套中断初始化 { NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = 37; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } /** * @ 函 数 void init_all_periph(void) * @ 功 能 GPIO configue * @ 说 明: * 入口参数: * 返回参数: ----------------------------------------------------------------------- */ void all_periph_Config(void) // { SystemInit(); // //GPIOA、USART1、AFIO时钟开启 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1|RCC_APB2Periph_AFIO, ENABLE); GPIOx_Config(); USARTx_Config(9600); VNIC_Config(); } int main() { unsigned char USA_DAT; all_periph_Config(); USART1->DR = 'Q'; while(1) { //调试中加上查询接收 if(USART1->SR&0x20) //查询是否接受到数据 { USA_DAT=USART1->DR; while(!(USART1->SR&0x40)); //上次数据未发完 USART1->DR=USA_DAT; } } } void USART1_IRQHandler(void) //串口中断处理程序 { unsigned long flag=0; if(USART1->SR&0x00000020) { while(USART1->SR&0x00000020) //RXNE为1已接收 { USART1->CR1&=0xffffffdf; //关闭接收使能 flag=USART1->DR&0xff; //读出 USART1->DR=flag&0xff; //送入发送寄存器 while((USART1->SR)&0x80==0); //等待数据移出 while((USART1->SR)&0x40==0); //确认发送完成 flag=USART1->SR; } USART1->CR1|=0x00000020; //开启接收使能 } //发送完成中断,调试中加上 // if(USART1->SR&0x00000040) // { // USART1->DR='7'; //送入发送寄存器 // while((USART1->SR)&0x80==0); //等待数据移出 // while((USART1->SR)&0x40==0); //确认发送完成 // } } |
|
相关推荐
1 个讨论
|
|
|
已排除线路问题
|
|
|
|
|
|
|
|
你正在撰写讨论
如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。
STM32F405驱动DS1302时钟模块,输出时间错乱该怎么排查?
2810 浏览 2 评论
stm32f405rgt6驱动DS1302ZN出现时间错乱问题
2420 浏览 1 评论
stm32用fsmc读取ad7606采集数据,数据不变,只有开发版复位才更新数据
2288 浏览 0 评论
2404 浏览 1 评论
1643 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 17:02 , Processed in 0.687919 second(s), Total 59, Slave 44 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2225