USART2不能接收数据

2019-07-21 05:02发布

原子哥,我遇到一个很棘手的问题,我现在使用STM32F103VCT6,串口1通信正常,串口2只能发送数据,不能接收数据,只要接收到数据,芯片就复位了。串口2就进入不了接收中断。还有一个问题就是串口2能使用115200波特率吧?
[mw_shl_code=c,true]void USART2_Init(u32 U2_pclk1,u32 U2_bound) { float U2_temp; u16 U2_mantissa; u16 U2_fraction; U2_temp=(float)(U2_pclk1*1000000)/(U2_bound*16);//得到USARTDIV U2_mantissa=U2_temp; //得到整数部分 U2_fraction=(U2_temp-U2_mantissa)*16; //得到小数部分 U2_mantissa<<=4; U2_mantissa+=U2_fraction; RCC->APB2ENR|=1<<2; //使能PORTA口时钟 RCC->APB1ENR|=1<<17; //使能串口2时钟 GPIOA->CRL&=0XFFFF00FF; //IO状态设置 GPIOA->CRL|=0X00008B00; //IO状态设置 //GPIOA->CRL=0X44448B44; //IO状态设置 RCC->APB1RSTR|=1<<17; //复位串口2 RCC->APB1RSTR&=~(1<<17);//停止复位 //波特率设置 USART2->BRR=U2_mantissa; // 波特率设置 USART2->CR1|=0X200C; //1位停止,无校验位. USART2->CR1|=1<<8; //PE中断使能 校验错误进入中断 USART2->CR1|=1<<5; //接收缓冲区非空中断使能 MY_NVIC_Init(1,1,USART2_IRQChannel,2);//组2,最低优先级 } [/mw_shl_code] [mw_shl_code=c,true]void USART2_IRQHandler(void) {     u8 i;////换存变量 if(USART2->SR&(1<<5))//接收到数据 {       USART2->SR&=~(1<<5);      i=USART2->DR;        LED1=~LED1; } }  [/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
正点原子
1楼-- · 2019-07-21 08:35
没有中断服务函数吧?
yaoqi_STM32
2楼-- · 2019-07-21 11:33
 精彩回答 2  元偷偷看……
八度空间
3楼-- · 2019-07-21 17:28
我用库函数初始化的,接收发送都没问题,是不是哪个寄存器没有设置还是。。。
yaoqi_STM32
4楼-- · 2019-07-21 22:01
回复【4楼】Badu_Space:
---------------------------------
我的程序在STM32F103ZET6能用,在STM32F103VCT6上不能用,程序就在上面粘着,
八度空间
5楼-- · 2019-07-22 00:56
回复【5楼】yaoqi_STM32:
---------------------------------
IO口对应初始化才行喔,没看过STM32F103VCT6这个芯片的管脚排布
yaoqi_STM32
6楼-- · 2019-07-22 04:19
  串口2不能接收数据已经搞定,硬件原因,串口2的接收引脚和旁边的引脚连接了一点,谢谢原子哥和大家的帮助!!!

一周热门 更多>