STM32,烧录、复位后串口发送0xFF

引用:解决GD(STM)32串口未初始化上电有FF或其他数据发送问题_设备未启动串口输出ff-CSDN博客

首先,可能与硬件上没有上拉TX/RX有关

其次,与代码中串口发送函数放在main的最前面有关,复位后迅速执行到串口发送,增加Delay延时5ms后就没有再出现发送0xFF,我用的485,所以只要不切换EN引脚就不能发送

uint8_t sendbuffer[5]={0x11,0x22,0x33,0x44,0x55};

int main(void)
{
	Serial_Init();

	Delay_ms(5);
	GPIO_SetBits(GPIOA,GPIO_Pin_8);
	
	for(int i=0;i<5;i++)
	{

					Serial_SendByte(sendbuffer[i]);
	}
	
	GPIO_ResetBits(GPIOA,GPIO_Pin_8);
	
while(1){}

}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以使用STM32串口模块来发送和接收数据,并通过调试助手等工具来查看接收到的数据。下面是一个简单的示例代码,演示了如何使用STM32串口发送数据并接收并显示接收到的数据: ```c #include "stm32f4xx.h" void USART2_Init(void) { // 启用USART2和GPIOA的时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); GPIO_InitTypeDef GPIO_InitStruct; USART_InitTypeDef USART_InitStruct; // 配置USART2的引脚 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOA, &GPIO_InitStruct); // 将引脚连接到USART2的功能 GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2); GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_USART2); // 配置USART2 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_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART2, &USART_InitStruct); // 启用USART2 USART_Cmd(USART2, ENABLE); } void USART2_SendChar(char ch) { // 等待发送缓冲区为空 while (!(USART2->SR & USART_SR_TXE)) ; // 发送数据 USART2->DR = (ch & 0xFF); } char USART2_ReceiveChar(void) { // 等待接收缓冲区非空 while (!(USART2->SR & USART_SR_RXNE)) ; // 读取接收到的数据 return (USART2->DR & 0xFF); } int main(void) { USART2_Init(); while (1) { // 发送数据 USART2_SendChar('H'); USART2_SendChar('e'); USART2_SendChar('l'); USART2_SendChar('l'); USART2_SendChar('o'); USART2_SendChar('\n'); // 接收数据并显示 char receivedChar = USART2_ReceiveChar(); // 将接收到的数据显示在串口助手等工具上 USART2_SendChar(receivedChar); } } ``` 这是一个基本的示例,它在循环中发送字符串"Hello"并接收并显示接收到的字符。你可以根据需要修改代码以适应你的应用场景。记得根据你的硬件配置修改引脚和串口号。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值