王伟凡930 2023-02-03 21:59 采纳率: 50%
浏览 404
已结题

STM32基于HAL库使用串口发送16进制数组

uint8_t dj[12]={0x55,0x55,0x05,0x06,0x01,0x01,0x00};
uint8 t i;
for(i=0;i<7;i++)
{HAL_UART_Transmit (&huart4,&dj[i],1,0xfff);}
这样写对不对

img


img

  • 写回答

8条回答 默认 最新

  • 诺水城子 2023-02-07 11:19
    关注

    去掉for,直接用 HAL_UART_Transmit (&huart4,dj,7,0xfff); 要考虑可能存在的丢包和断包问题,发送7字节,接收方可能接收1次或者多次才能收满这7字节。

    丢包主要考虑底层缓存空间太小,接收不及时数据被覆盖掉。可以测试一下你原来for循环单次1一字节,每次发送增加点延时。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
  • 工控匠 2023-02-05 19:51
    关注

    使用hal_uart_transmit直接发送这个数组就行。你用串口助手先检测一下。一般是你配置出错了。不是发送的问题

    评论
  • 鑫鑫缺点金 2023-02-06 10:16
    关注
    #include "stm32f1xx_hal.h"
    #include "main.h"
    #include "string.h"
    UART_HandleTypeDef huart2;
    void SystemClock_Config(void);
    static void MX_GPIO_Init(void);
    static void MX_USART2_UART_Init(void);
    int main(void) {HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_USART2_UART_Init();
    uint8_t data[2] = {0x12, 0x34};
    HAL_UART_Transmit(&huart2, data, 2, 1000);
    while (1) {}}
    
    评论
  • BitGPT 2023-02-03 22:39
    关注

    “该回答引用ChatGPT"

    这段代码的目的是通过串口发送一个 16 进制数组 dj。

    代码中定义了一个 16 进制数组 dj,其元素依次为 0x55, 0x55, 0x05, 0x06, 0x01, 0x01 和 0x00。

    然后,通过一个 for 循环,从 0 开始遍历数组,到 6 结束。每次循环,通过调用 HAL_UART_Transmit 函数,向串口发送一个元素,参数分别是:
    /
    &huart4:串口句柄。
    &dj[i]:要发送的元素的地址。
    1:发送的数据长度,即 1 个字节。
    0xfff:发送超时时间,即 0xfff 毫秒。
    /
    整个循环将遍历整个数组,并逐个元素发送到串口。

    评论
  • 哇小侠 2023-02-04 23:23
    关注

    这样写是对的,按顺序向串口发送了一个16进制字节数组,dj[0] 到 dj[6]。注意在每次循环内,需要将 &dj[i] 作为数据地址传递给 HAL_UART_Transmit 函数,这样可以发送一个字节的数据。

    评论
  • CSDN-Ada助手 CSDN-AI 官方账号 2023-02-05 01:08
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论
  • 有问必答小助手 2023-02-07 11:24
    关注
    您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
    PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632
    评论
  • Eliot5566 2023-02-03 22:06
    关注

    该回答引用ChatGPT,如果有帮助到您请点个采纳
    您的代码是在基于HAL库的STM32上使用串口发送16进制数组。

    您可以使用HAL_UART_Transmit函数发送数据,其第一个参数是UART句柄,第二个参数是要发送的数据数组,第三个参数是要发送的数据的长度,第四个参数是超时时间。

    您的代码实际上循环7次,并在每次循环中发送dj[i]中的一个字节,即dj[0]到dj[6]。

    请注意,您还需要对UART句柄进行初始化,以使串口工作正常,并确保接收端能够正确接收串口数据。

    评论
查看更多回答(7条)

报告相同问题?

问题事件

  • 系统已结题 2月15日
  • 已采纳回答 2月7日
  • 修改了问题 2月3日
  • 修改了问题 2月3日
  • 展开全部

悬赏问题

  • ¥15 Tpad api账户 api口令
  • ¥30 ppt进度条制作,vba语言
  • ¥15 stc12c5a60s2单片机测光敏ADC
  • ¥15 生信simpleaffy包下载
  • ¥15 请教一下simulink中S函数相关问题
  • ¥15 在二层网络中,掩码存在包含关系即可通信
  • ¥15 端口转发器解析失败不知道电脑设置了啥
  • ¥15 Latex算法流程图行号自定义
  • ¥15 关于#python#的问题:我在自己的电脑上运行起来总是报错,希望能给我一个详细的教程,(开发工具-github)
  • ¥40 基于51单片机实现球赛计分器功能