RexZheng-202302 发表于 2014-10-28 20:27:29

STM32F407 UART发不出数据

我用的是PC10和PC11的UART3,配置代码如下:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_USART3);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_USART3);
/* Configure USART Tx as alternate function*/
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
/* Configure USART Rx as alternate function*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_Init(GPIOC, &GPIO_InitStructure);

USART_InitStructure.USART_BaudRate =9600; //波特率
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; // 发送/接收使能
/* Configure and enable the USART */
USART_Init(USART3, &USART_InitStructure);
/* Enable the USART Receive interrupt */
USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
USART_Cmd(USART3, ENABLE);
/* Enable USART Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

结果
    USART_SendData(USART3, *(Buf + i) );
    while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
就一直停在这里了,TXE不置位,USART3的DR寄存器一直位0。不知道是什么原因

Eagleson 发表于 2014-10-28 21:27:58

给你一个参考 也是用的USART3

发表于 2014-10-29 09:36:20

没有开启发送中断,查询的应该是发送缓冲区的标志位是否为1,如果为1说明数据没有发送出去,为0说明数据发送成功,缓冲区被清空。另外,楼主可以用电脑接收一下是否有数据发送出去。

RexZheng-202302 发表于 2014-10-29 11:16:11

谢谢,用这个程序是可以的,但我把配置设置成完全一样了,我自己这边还是不行。并且用我自己的配置放到这个程序里UART也是工作正常的。不清楚怎么回事了。不知和我用了FSMC和USB接口是不是有关,但我已经把相关调用的函数都屏蔽了。就只剩UART功能了,还是不行,郁闷啊

Eagleson 发表于 2014-10-30 11:53:41

RexZheng-202302 发表于 2014-10-29 11:16
谢谢,用这个程序是可以的,但我把配置设置成完全一样了,我自己这边还是不行。并且用我自己的配置放到这 ...

还是不行??

RexZheng-202302 发表于 2014-11-2 19:33:55

安 发表于 2014-10-29 09:36
没有开启发送中断,查询的应该是发送缓冲区的标志位是否为1,如果为1说明数据没有发送出去,为0说明数据发 ...

但是我不用中断发送的,查询发送。while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);这个也是例程里的,当把数据送缓冲区时TXE应该置1,然后发送完了变0. 但是我数据送缓冲区后TXE不会置位。用示波器测试实际也没有数据发出

RexZheng-202302 发表于 2014-11-2 19:34:57

Eagleson 发表于 2014-10-30 11:53
还是不行??

时的,单独用你的例程是可以的。放到我的程序里去就不行了

RexZheng-202302 发表于 2014-11-2 19:35:52

并且我另一个项目里用的STM32F405的USART也不行。同样的问题。

RexZheng-202302 发表于 2014-11-2 19:37:18

Eagleson 发表于 2014-10-30 11:53
还是不行??

USART配置和其他配置是不是要有先后顺序啊?

Eagleson 发表于 2014-11-3 08:35:04

RexZheng-202302 发表于 2014-11-2 19:37
USART配置和其他配置是不是要有先后顺序啊?

不应该有先后顺序的,你检查一下看是不是后面的配置把什么关了,引起串口通信失败的
页: [1] 2
查看完整版本: STM32F407 UART发不出数据