打印

stm32串口1,2,3,4为什么1,2可以,3,4就不行啊。

[复制链接]
13731|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qljqlj|  楼主 | 2010-3-24 11:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
USART_InitStructure.USART_BaudRate = 115200;
    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 the USART */
    USART_Init(USART1, &USART_InitStructure);
    USART_Init(USART2, &USART_InitStructure);
    USART_Init(USART3, &USART_InitStructure);
    USART_Init(UART4, &USART_InitStructure);
   
    /* Configure the IT */
    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
    USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
    USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
    USART_ITConfig(UART4, USART_IT_RXNE, ENABLE);
   
    /* Enable the USART */
    USART_Cmd(USART1, ENABLE);
     USART_Cmd(USART2, ENABLE);
     USART_Cmd(USART3, ENABLE);
     USART_Cmd(UART4, ENABLE);
沙发
qljqlj|  楼主 | 2010-3-24 11:48 | 只看该作者
不行。。。是指发送不出数据来,但是能中断接收,另外gpio和rcc初始化都是一样的。郁闷。。。

使用特权

评论回复
板凳
qljqlj|  楼主 | 2010-3-24 13:33 | 只看该作者
我承认这个问题很简单,可是我初始化4个串口的代码是完全一样的,可是为什么1,2可以,3,4不行啊。。。。该有的,我都初始化了。。。。。

使用特权

评论回复
地板
笑苍天| | 2010-3-24 16:31 | 只看该作者
能收不能发,说明串口配置是正确的
请检查串口3,4的发送脚硬件连接

使用特权

评论回复
5
acent| | 2010-3-24 16:38 | 只看该作者
楼主可以参考一下 我用3.0的库
void USART3_Configuration(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
        USART_ClockInitTypeDef USART_ClockInitStructure;
        USART_InitTypeDef USART_InitStructure;
        /*使能USART1时钟*/
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);

    /* Configure USART3 Rx (PB.11) as input floating */
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
          GPIO_Init(GPIOB, &GPIO_InitStructure);
       
        /* Configure USART3 Tx (PB.10) as alternate function push-pull */
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
          GPIO_Init(GPIOB, &GPIO_InitStructure);

    /*设置USART3波特率为115200*/
    USART_InitStructure.USART_BaudRate = 115200;
          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 USARTx */
          USART_Init(USART3, &USART_InitStructure);
       
        USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;
        USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;
        USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;
        USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;

        USART_ClockInit(USART3, &USART_ClockInitStructure);
    /* Enable the USARTx */
    USART_Cmd(USART3, ENABLE);
    /* Enable the USARTx rx it*/
    USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);}

另外发送函数USART_SendData(USARTx, c);因为库函数没有等待发送完成标志,所以连续发送可能会出错,可以改成这样void USARTx_Putc(USART_TypeDef* USARTx,char c)
{
    USART_SendData(USARTx, c);
     while(USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET);
}

使用特权

评论回复
6
IJK| | 2010-3-24 17:42 | 只看该作者
能收不能发,说明串口配置是正确的
请检查串口3,4的发送脚硬件连接
笑苍天 发表于 2010-3-24 16:31


是要注意:串口3,4的发送脚如果与其它外设共用,就可能有冲突,导致LZ的结果。

使用特权

评论回复
7
qljqlj|  楼主 | 2010-3-24 18:13 | 只看该作者
感谢楼上兄弟们的回复

1,管教应该没有虚焊之类的错误,我做了个io脉冲输出,都正常,这样应该确认芯片,硬件没问题吧,
2,我的串口没有复用,只是和外设相连。最简单的连接。
3,我搜遍google,发现用芯片不支持的问题,我用的是stm32f103vet6,datasheet上指出,是支持5串口的。
4,另外,我尝试着在接收3,接收4设置断点,结果都正常中断。

    啧啧,奇了,现在任务紧,没空瞎想,其他用的外设驱动进行的很顺利,不到一个礼拜,全打通了。妈的,居然在这上面栽跟头了。
    另外,用一次在仿真调试时,突然把主板电源断了,导致主板芯片,调试异常,啧啧,stm32感觉不是很泼辣。。。
   明天把异常的芯片焊下来,再装一个新的,看看是不是还是如此。。。。。:Q

使用特权

评论回复
8
pkat| | 2010-3-24 20:31 | 只看该作者
有可能是芯片问题,确定硬件外围没问题,就只能换芯片了

使用特权

评论回复
9
香水城| | 2010-3-25 09:29 | 只看该作者
楼主可以搜索一下,本版以前也有人遇到相似的问题,有的是PCB接线错了,有的是外部的232芯片有问题,有的是程序问题,还没有人说是STM32的问题。

使用特权

评论回复
11
gwb721123| | 2010-3-25 12:27 | 只看该作者
看你的口线功能是不是在其他地方给改了

使用特权

评论回复
12
rider1| | 2010-3-25 12:53 | 只看该作者
UART3和SPI2有冲突,要把SPI的时钟关掉。

使用特权

评论回复
13
qljqlj|  楼主 | 2010-3-25 13:51 | 只看该作者
今天早上来就把调试异常的芯片换掉,结果还是一样,不是硬件,那肯定是软件了。
仔细分析程序,最有可能的就是rcc了,我把她们全都打开了,结果我逐一调试,发现
RCC_APB1Periph_I2C1,RCC_APB1Periph_I2C2打开导致usart3不正常,RCC_AHBPeriph_SDIO打开导致usart4不正常,想的可能是管脚冲突,打开管教定义,呵呵,的确如此。

刚才上网回帖的时候,rider1说的对,早看到,我就不逐一测试找原因了,耗5个小时,
谢谢大家。。。。。吃午饭去了

使用特权

评论回复
14
fengyan81| | 2010-3-25 16:16 | 只看该作者
呵呵,学习了

使用特权

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

本版积分规则

41

主题

134

帖子

3

粉丝