OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3123|回复: 3

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

[复制链接]

1

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2017-5-5
在线时间
10 小时
发表于 2017-5-5 15:19:07 | 显示全部楼层 |阅读模式
1金钱
刚学习的使用串口的视频,想用串口实现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。


求组,希望有人能指出我的问题。多谢!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-5-5 19:07:58 | 显示全部楼层
第二种,第三种,都可以
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2017-5-5
在线时间
10 小时
 楼主| 发表于 2017-5-6 02:17:57 来自手机 | 显示全部楼层
正点原子 发表于 2017-5-5 19:07
第二种,第三种,都可以

具体怎么配置呢?比如串口2,我配置好多次都不成功。视频资料也看了好多,实在没看出来……哪里错啦。可以把代码发给我吗?我对比下。我用的是迷你版。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-5-8 01:50:40 | 显示全部楼层
帮顶
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-21 14:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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