发 帖  
原厂入驻New
[讨论] stm32f103vet6串口2使用小问题探讨
2020-9-4 14:20:46  157 STM32 串口
分享
STM32f103vet6用串口2重映射到PD5/PD6,程序启动串口2可以正常收发,在运行途中如果重新设置波特率再调用初始化函数串口2后发送不了数据发送脚一直为高电平,但复位后可以正常收发。

后来我加了更改波特率后就软件复位程序的语句后可以使串口正常收发,但是这是建立在不影响其他程序运行的条件下的,并不完美。不知道是否是我初始化的顺序有问题,如果解决了我再来告知大家吧!


附上串口初始化程序
void rs485_Init(u32 bound){  

   //GPIO端口设置
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

        RCC_APB2PeriphclockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);//使能GPIOD时钟
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//使能USART2时钟
        GPIO_PinRemapConfig(GPIO_Remap_USART2,ENABLE);                         //串口2部分重映射到PD5、PD6


        /*  配置GPIO的模式和IO口 */
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;                                                        //TX        串口输出PD5
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;                    //复用推挽输出
        GPIO_Init(GPIOD,&GPIO_InitStructure);                                                          /* 初始化串口输入IO */
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;                                                        //RX        串口输入PD6
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOAtiNG;        //模拟输入
        GPIO_Init(GPIOD,&GPIO_InitStructure);                                                         /* 初始化GPIO */


   //USART2初始化设置
        USART_InitStructure.USART_BaudRate = bound;                                        //波特率设置
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;        //字长为8位数据格式
        USART_InitStructure.USART_StopBits = USART_StopBits_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(USART2, &USART_InitStructure); //初始化串口2

        USART_Cmd(USART2, ENABLE);  //使能串口2

        USART_CleaRFlag(USART2, USART_FLAG_TC);

        USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启相关中断

        //Usart2 NVIC 配置
        NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;//串口2中断通道
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//抢占优先级3
        NVIC_InitStructure.NVIC_IRQChannelSubPriority =1;                //子优先级1
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQ通道使能
        NVIC_Init(&NVIC_InitStructure);        //根据指定的参数初始化VIC寄存器、        

}



1
2020-9-4 14:20:46   评论 分享淘帖

相关讨论

1 个讨论
很好很不错,谢谢楼主分享
2020-9-8 21:09:16 评论

举报

撰写讨论

你正在撰写讨论

如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
发讨论
关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表