打印

STM32 USART3引脚重定义

[复制链接]
4506|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
m__dd|  楼主 | 2013-10-28 22:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用的是STM32F101VBT6,USART3重定义到PD8、PD9,但经示波器测量PD8、PD9电平时钟为低!下面是代码
串口配置:
void USART3_Configuration(void)
{
    USART_InitTypeDef USART_InitStructure;
    /* USART3 configuration ------------------------------------------------------*/
    USART_InitStructure.USART_BaudRate = 19200;
    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;
    /* Configure USART3 */
    USART_Init(USART3, &USART_InitStructure);
    /* Enable USART3 Receive interrupts */
    USART_ClearITPendingBit(USART3,USART3_IRQn);
    USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
    /* Enable the USART3 */
    USART_Cmd(USART3, ENABLE);
}

引脚配置:
void USART3_GPIO_Configuration(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOD, ENABLE);                 
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);
    /**************************GPIOD/ USART3******************************/
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;                    //USART3 TX
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;         //复用推挽输出
    GPIO_Init(GPIOD, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;                    //USART3 RX
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;   //复用开漏输入
   
    GPIO_Init(GPIOD, &GPIO_InitStructure);
    GPIO_PinRemapConfig(GPIO_PartialRemap_USART3, ENABLE);
}

相关帖子

沙发
m__dd|  楼主 | 2013-10-29 09:42 | 只看该作者
程序老是死在while((USART3->SR & 0x40) == 0);

使用特权

评论回复
板凳
m__dd|  楼主 | 2013-11-5 21:14 | 只看该作者
时钟配置有问题

使用特权

评论回复
地板
zhaoyu2005| | 2013-11-6 12:01 | 只看该作者
重定义错了,至于怎么错的,你仔细看库原文件的说明或者关于usart3重定义的说明。其他时钟是否开启什么的自己查

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
m__dd + 3
5
m__dd|  楼主 | 2013-11-8 12:15 | 只看该作者
zhaoyu2005 发表于 2013-11-6 12:01
重定义错了,至于怎么错的,你仔细看库原文件的说明或者关于usart3重定义的说明。其他时钟是否开启什么的自 ...

嗯,关键还是时钟问题,不容易发现

使用特权

评论回复
6
zhaoyu2005| | 2013-11-8 13:44 | 只看该作者
你的程序即使时钟什么的配置正常,能正常收发数据么?

使用特权

评论回复
7
m__dd|  楼主 | 2013-11-9 14:35 | 只看该作者
zhaoyu2005 发表于 2013-11-8 13:44
你的程序即使时钟什么的配置正常,能正常收发数据么?

可以啊,现在一切正常

使用特权

评论回复
8
zhaoyu2005| | 2013-11-11 08:50 | 只看该作者
如果你只改动了时钟什么的,没有改动重定义,也没有换接口,就正常,那就神奇了,STM32的串口三重定义,分部分重定义和全部重定义,这两种情况的收发端口是不一致的,所以才有上面的重定义错了一说

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
m__dd + 3
9
m__dd|  楼主 | 2013-12-5 19:13 | 只看该作者
zhaoyu2005 发表于 2013-11-11 08:50
如果你只改动了时钟什么的,没有改动重定义,也没有换接口,就正常,那就神奇了,STM32的串口三重定义,分 ...

你说的是的,代码我贴的是以前的。之后重定义也改了。
最后时钟配置改后可以了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

79

帖子

0

粉丝