首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >STM32f0发现USART缓冲区未发送

STM32f0发现USART缓冲区未发送
EN

Stack Overflow用户
提问于 2014-04-28 02:15:09
回答 1查看 2.3K关注 0票数 0

我一直在做一个需要使用UART的项目。我参考了许多不同的来源,并确信USART设置正确。我一直在运行调试器上的代码,我注意到我的xmitbuffer正在正确填充。我试图在一个循环中打印hello,当我遍历代码时,缓冲区中充满了HelloHelloHello。这与预期相符。但是,终端上没有显示任何内容。我尝试过putty和TeraTerm。

我查看了USART1的状态寄存器,发现TX位设置为1。我假设1表示发送已完成。我试过了,波特率分别为9600和115200,但都没有成功。我不确定如何继续。

注意我用来将USART发送到PC的电缆也很重要。我正在使用来自FTDI (http://www.ftdichip.com/Products/Cables/USBRS232.htm)的USB-RS232-WE-1800-BT_0.0,我想这可能是我的错误。此电缆适用于此应用程序吗?我是否需要TTL电缆来代替?

所有的设置都在下面,还有我的主函数。

USART设置:

代码语言:javascript
复制
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

USART_InitStruct.USART_BaudRate = 9600;
USART_InitStruct.USART_WordLength = USART_WordLength_8b;
USART_InitStruct.USART_StopBits = USART_StopBits_1;
USART_InitStruct.USART_Parity = USART_Parity_No ;
USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

USART_Init(USART1, &USART_InitStruct);

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

USART_Cmd(USART1, ENABLE);

GPIO设置:其中大部分是针对其他设备的。端口A引脚9和10是我们正在使用的USART TX和RX引脚。

代码语言:javascript
复制
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); 
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); 
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE); 

GPIO_A.GPIO_Pin  = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_15;
GPIO_A.GPIO_Mode = GPIO_Mode_IN;
GPIO_A.GPIO_Speed = GPIO_Speed_Level_2;
GPIO_A.GPIO_OType = GPIO_OType_PP;
GPIO_A.GPIO_PuPd = GPIO_PuPd_UP;

GPIO_B.GPIO_Pin  = GPIO_Pin_All;
GPIO_B.GPIO_Mode = GPIO_Mode_IN;
GPIO_B.GPIO_Speed = GPIO_Speed_Level_2;
GPIO_B.GPIO_OType = GPIO_OType_PP;
GPIO_B.GPIO_PuPd = GPIO_PuPd_UP;

GPIO_C.GPIO_Pin  = GPIO_Pin_All;
GPIO_C.GPIO_Mode = GPIO_Mode_IN;
GPIO_C.GPIO_Speed = GPIO_Speed_Level_2;
GPIO_C.GPIO_OType = GPIO_OType_PP;
GPIO_C.GPIO_PuPd = GPIO_PuPd_UP;

GPIO_Init(GPIOA, &GPIO_A);
GPIO_Init(GPIOB, &GPIO_B);
GPIO_Init(GPIOC, &GPIO_C);

GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1);

Main:

代码语言:javascript
复制
void main(void)
{
    initMicro();


    while(1)
    {

        printf("Hello");
    }

}
EN

回答 1

Stack Overflow用户

发布于 2014-04-28 07:26:17

如果您的电缆直接连接到MCU,那么这就是您的问题所在。电缆的datasheet表5.3表明它使用标准RS-232电压电平,查看数据手册第6节中的原理图即可看到RS-232电平移位器的使用。STM32F0DISCOVERY板卡中单片机的电源电压为3V,因此I/O电平为单电源3V,这与RS-232标准不兼容。

最不令人头疼的解决方案是买一条新的电缆,为此,看看有3V或3.3V I/O的电缆--额外的0.3V应该不是问题。这是来自SparkFun的one,但你应该很容易在eBay或AliExpress上找到替代品(可能更便宜)。

低成本的解决方案是将电压电平移位器从当前电缆上拆下,并将引脚直接连接到FTDI芯片上(FT232RQ)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23327124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档