STM32F407的USART1只能映射到PB6-7,如果选择PA9-10就乱码

2019-07-14 17:03发布


    完成1个工程项目设计,使用STM32F407VGT6芯片,USART1选用了PA9,PA10,板子完成后串口调试总是过不了。不得已使用STM32F4-DISCOVERY通过RS232电平转换连接到PC机串口进行RS232通讯验证。
    首先使用GPIOA-PA9,PA10映射USART1,初始化代码如下:
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
        GPIO_Init(GPIOA,&GPIO_InitStructure);

        USART_InitStructure.USART_BaudRate = bound;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        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);
       USART_Cmd(USART1, ENABLE);

     PC机方使用SSCOM,通讯结果是一片乱码。
   后改用PB6,PB7映射USART1,修改相关语句:
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); //对不起12楼,我粘贴错了
       RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);


        GPIO_PinAFConfig(GPIOB,GPIO_PinSource6,GPIO_AF_USART1);
        GPIO_PinAFConfig(GPIOB,GPIO_PinSource7,GPIO_AF_USART1);
         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;

        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
        GPIO_Init(GPIOB,&GPIO_InitStructure);

       USART初始化相同,不重复了。


从PB口进行,通讯结果一切正常,
查看手册:USART1可以映射到PA9,PA10或PB6,PB7,手册并未特别说明两者使用在USART1有何区别或初始化时需要做何特殊处理。百思不得其解。由于PCB版图已经制作完成,使用PA了口,现在如果从软件方面无法纠正将造成不少的浪费。
由于工程板与STM32F4-DISCOVERY板的PA口在USART1工作时出现同样故障,2片板的PA口同时损坏的机率很小,并且2片板的PA9,PA10配置为非USART1模式时工作均正常。
希望得到专家的解答。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
骑猪去天山
1楼-- · 2019-07-15 18:48
可能是你其它代码冲突,你去掉所有代码只留下串口1的代码调试下是否能通过
ctwewer
2楼-- · 2019-07-15 19:56
骑猪去天山 发表于 2018-10-10 21:52
可能是你其它代码冲突,你去掉所有代码只留下串口1的代码调试下是否能通过

谢谢楼上,我就是只用USART,其他都不用,而且是在同一台开发板的不同GPIO口得到不同结果。
naiztycheng
3楼-- · 2019-07-15 22:58
随便问一下,你的PA9和PA10确定是只连接到了max3232,有没有可能是硬件上PA9和PA10有问题。或者和附近的走线有没有关联。

一种好的办法是你找块F4的经得起验证的板子试一下。乱码问题一般是硬件的问题。比如直接用ttl当作rs232输入输出都会造成乱码(又是不是烧掉)。
骑猪去天山
4楼-- · 2019-07-16 03:19
ctwewer 发表于 2018-10-10 22:07
谢谢楼上,我就是只用USART,其他都不用,而且是在同一台开发板的不同GPIO口得到不同结果。







看到你两个时钟有什么不同了吗? 第二个改错地方,串口1时钟没使能,
ctwewer
5楼-- · 2019-07-16 08:44
 精彩回答 2  元偷偷看……
ctwewer
6楼-- · 2019-07-16 11:14
naiztycheng 发表于 2018-10-10 22:23
随便问一下,你的PA9和PA10确定是只连接到了max3232,有没有可能是硬件上PA9和PA10有问题。或者和附近的走线有没有关联。

一种好的办法是你找块F4的经得起验证的板子试一下。乱码问题一般是硬件的问题。比如直接用ttl当作rs232输入输出都会造成乱码(又是不是烧掉)。 ...

我就是在工程板无法正常的情况下换用一片STM32F4-DISCOVERY来评估的。

一周热门 更多>