STM32串口第一个发送字节总为FF问题

最近遇到了一个STM32串口上电就发送FF的问题,查阅了一些资料,最后有用的办法是将GPIO的复用写在GPIO初始化之前。

原因可能是STM32上电后,GPIO电平会发被上拉,而此时UART误以为这是一个起始信号,因此会发送FF;另外还有办法是说在Tx上加入上拉电阻,感觉这个不太靠谱,也比较麻烦,以后有时间可以尝试一下;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用STM32串口功能来接收数据,并根据接收到的数据来控制LED的亮灭。下面是一个简单的示例代码: ```c #include "stm32f4xx.h" // 定义串口接收缓冲区 #define BUFFER_SIZE 7 uint8_t buffer[BUFFER_SIZE]; // 标志位,表示是否接收到完整的数据包 uint8_t packetReceived = 0; void USART2_IRQHandler(void) { if (USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) { static uint8_t index = 0; // 读取接收到的数据 uint8_t data = USART_ReceiveData(USART2); // 如果接收到的数据是数据包的起始标志 if (data == 0x55 && index == 0) { buffer[index++] = data; } // 如果已经接收到了起始标志,并且未达到缓冲区大小 else if (index > 0 && index < BUFFER_SIZE) { buffer[index++] = data; // 如果接收到了完整的数据包 if (index == BUFFER_SIZE) { packetReceived = 1; index = 0; } } } } int main(void) { // 初始化LED引脚和串口 // ... while (1) { // 如果接收到了完整的数据包 if (packetReceived) { // 判断数据包内容是否正确,这里假设第5个字节为控制LED亮灭的数据 if (buffer[4] == 0x01) { // 使LED亮起 // ... } else if (buffer[4] == 0x00) { // 关闭LED // ... } packetReceived = 0; } } } ``` 在上述代码中,我们使用了USART2作为串口接收数据,并通过中断方式进行接收。当接收到完整的数据包后,我们根据数据包的内容来控制LED的亮灭。 请注意,以上代码只是一个示例,你需要根据实际的硬件配置和需求进行适当的修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值