#include "stm32f4xx.h"
#include "stdio.h"
void Serial_Init(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Tx;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_Init(USART3, &USART_InitStructure);
USART_Cmd(USART3, ENABLE);
}
void Serial_SendByte(uint8_t Byte)
{
while (USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
USART_SendData(USART3, Byte);
}
我用的是robomaster的开发板a型(芯片stm32f427IIH),请问为啥明明按照江科大的代码敲的,但为啥通过ttl转串口向电脑输入数据得到的都是00呢。我的ch340g自己检测的收发又没有问题。实在没搞懂。线应该是没有接错的,开发板的TX和RX与ch340g的TX和RX交叉相接,串口调试助手波特率设置也是9600
发送的数据内容是啥?上位机能收到数据,但是0x00吗?还是没有收到数据?测试的时候将发送函数里的while循环先注释点,试下!
这些代码看不出什么,要看传入的参数是什么
线连接或者驱动方面有问题
我之前遇到是这样处理的
这不又出问题了,本身应该打印到串口调试助手的东西显示不出来,用十六进制显示出来00,在百度上百度了1个小时,他们的错误我都避免了。在经历了不断调试以及自我检查程序之后,发现USART-Tx端口配置出错,STM32不同于STM8,由于其端口的复用功能,在使用STM32的USART功能时,需要将其Tx端口配置为复用推挽输出,而不是推挽输出(注意:是复用)。
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;//错误的程序
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;//正确的程序
robomaster开发板a的usart输出总是00,需要检查这几个方面的问题:
首先检查下看 RXT、TXD电路是否有问题,比如是否接反了。
其次,看下你的波特率设置是否有问题,是不是你的波特率设置远低于9600
是否存在死循环等逻辑上的问题。
检查一下输入数据、接线是否有问题
引用chatgpt内容作答:
根据您提供的代码,您正在使用STM32F427IIH芯片上的USART3模块进行串口通信。根据代码中的配置,您将USART3配置为仅用于发送(USART_Mode_Tx)数据。这意味着您只能通过USART3发送数据,而无法接收数据。
因此,如果您使用了与USART3的TX引脚连接的CH340G USB转串口模块,并尝试从计算机向开发板发送数据,您将无法在开发板上接收到这些数据。这就是为什么您观察到通过串口调试助手接收到的数据始终为00的原因。
如果您希望能够双向通信,您需要将USART3的模式配置为同时支持发送和接收(USART_Mode_Tx | USART_Mode_Rx),并配置USART3的RX引脚进行接收数据。
另外,请确保您的串口调试助手的串口设置与代码中的配置相匹配(波特率、数据位、停止位等)。
最后,确保您的硬件连接正确,包括正确连接了开发板的TX和RX引脚与CH340G模块的TX和RX引脚,并确保地线连接正常。
通过调整代码和硬件连接,您应该能够实现正常的串口通信。
回答部分参考、引用ChatGpt以便为您提供更准确的答案:
根据您提供的代码和描述,您在使用RoboMaster开发板A型(搭载STM32F427IIH芯片)上的USART进行串口通信时遇到了问题。尽管您的连接和设置都看起来是正确的,但通过TTL转串口将数据发送到电脑时,接收到的数据始终为"00"。以下是一些可能的原因和解决方案:
如果上述解决方案仍未解决问题,建议参考RoboMaster开发板的官方文档、示例代码或社区论坛,寻求其他开发者的帮助和建议。
请注意,由于无法直接查看硬件连接和其他代码部分,以上提供的解决方案仅是基于常见问题的推测。最终解决问题需要根据您的具体情况进行详细调试和排查。