完善资料让更多小伙伴认识你,还能领取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 个讨论
|
|
已排除线路问题
|
|
|
|
|
|
你正在撰写讨论
如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。
2105 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1941 浏览 3 评论
4537 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2084 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2599 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 09:25 , Processed in 0.583389 second(s), Total 58, Slave 44 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号