求组串口1重映射以及串口2.串口3配置的问题!

2019-08-19 19:23发布

刚学习的使用串口的视频,想用串口实现PWM控制灯的亮度。发现PWM使用的TIM_1,与串口1的PA9和PA10有冲突,如果运行了URAT1初始化,PWM就无法正常工作。于是想着有三种解决方法。第一种,分模块进行,即进行PWM脉宽调制就关闭串口,关闭PWM脉宽调制然后打开串口。第二种,修改PWM,使用TIM_2或者其他的定时器。第三种,就是将串口1重映射或者直接使用串口2和3.

奈何!!! 第一种我稍微尝试了一下,发现对于PWM控制灯的灵敏度好像有些影响,比较不理想,所以放弃了。
                  第二种我还没有去尝试。但使用LED1的话,端口复用功能里的TIM3_ETR 又是什么意思呢?
                  第三种最伤人了,如果正常的去配置串口1是没有任何问题的。但是按照步骤一步一步的去配置串口2,或者是串口3,全部都调试失败。串口1的重映射也是一样。都几天了。很伤心,我都有点怀疑人生了。


下面附上串口1重映射配置的部分代码:      


void uart_init(u32 bound){
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);     //GPIOB时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);    //使能USART1时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);       //使能AFIO时钟                          
        GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);             //开启重映射
       
        //USART1_TX   GPIOB,6
       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;                                //PB6
       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //复用推挽输出
       GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOA.9
   
        //USART1_RX          GPIOB.7初始化
       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;                                //PB7
       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
       GPIO_Init(GPIOB, &GPIO_InitStructure);  


         //Usart1 NVIC 配置
        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;                //子优先级3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQ通道使能
        NVIC_Init(&NVIC_InitStructure);        //根据指定的参数初始化VIC寄存器
  
       //USART 初始化设置


        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(USART1, &USART_InitStructure); //初始化串口1
       
        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断
       
        USART_Cmd(USART1, ENABLE);                    //使能串口1


}



其他的代码就和硬盘里的代码都是一样的,就前面自己开启的重映射,然后修改了GPIO为PB6和PB7。


求组,希望有人能指出我的问题。多谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。