求助,相同的IO口复用USART2就能用,复用USART3就不能用,谢谢!

2019-07-21 01:06发布

我查看了STM32F4的手册,应该IO都能复用的,现在我已经调通USART2了,用相同的初始化程序,只是将USART2的部分换成了USART3,发现不能正常通讯,程序如下:
[mw_shl_code=c,true]void Rs485Usart3Init(u32 pclk1 , u32 bound) { float temp; u16 mantissa; u16 fraction; temp=(float) (pclk1 * 1000000) / (bound * 16);//得到USARTDIV mantissa = temp; //得到整数部分 fraction = (temp - mantissa) * 16; //得到小数部分 mantissa <<= 4; mantissa += fraction; RCC->AHB1ENR |= 1 << 3; RCC->AHB1ENR |= 1 << 0; RCC->AHB1ENR |= 1 << 1; GpioSet(GPIOB,PIN7,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); GpioSet(GPIOA,PIN3,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_50M,GPIO_PUPD_PU); GpioSet(GPIOD,PIN5,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_50M,GPIO_PUPD_PU); GpioAfSet(GPIOA,3,7); GpioAfSet(GPIOD,5,7); // GpioSet(GPIOC,PIN8,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); // GpioSet(GPIOC,PIN6,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_50M,GPIO_PUPD_PU); // GpioSet(GPIOC,PIN7,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_50M,GPIO_PUPD_PU); // GpioAfSet(GPIOC,6,7); // GpioAfSet(GPIOC,7,7); RCC->APB1ENR |= 1 << 18; //使能串口3时钟 RCC->APB1RSTR |= 1 << 18; //复位串口3 RCC->APB1RSTR &= ~(1<<18); //停止复位 //波特率设置 USART3->BRR = mantissa; // 波特率设置 USART3->CR1 |= 0X200C; //1位停止,无校验位. //使能接收中断 USART3->CR1 |= 1 << 2; //串口接收使能 USART3->CR1 |= 1 << 5; //接收缓冲区非空中断使能 MY_NVIC_Init(3,3,USART3_IRQn,3);//组2,最低优先级 rs485Usart3TxEn = 0 ; //默认为接收模式 } void Rs485Usart3Send(u8 *buf , u8 len) { u8 sendCnt; u8 sendMsg[3] ={0x11,0x66,0x55}; rs485Usart3TxEn = 1; for(sendCnt=0;sendCnt<3;sendCnt++) { while((USART3->SR&0X40)==0);//等待发送结束 USART3->DR = sendMsg[sendCnt]; } while((USART3->SR&0X40)==0);//等待发送结束 rs485Usart3TxEn = 0; } void USART3_IRQHandler(void) { u8 recData; if(USART3->SR&(1<<5)) //接收到数据 { recData = USART3->DR; //存储接收到数据 if(pcRxCnt<64) { pcRxBuf[pcRxCnt] = recData ; pcRxCnt ++; } } pcRxBuf[10] +=1; }[/mw_shl_code] 这究竟是哪里出错了,请帮忙看看,谢谢!!!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。