zoukankan      html  css  js  c++  java
  • stm32的hal之串口库函数总结复习


    1、串口的使用方法
    在hal库中,有三个串口发送的函数
    a、HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
    b、HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
    c、HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

    其中,HAL_UART_Receive会超时的变量,就是说发送5给字节,如果一个字节发送需要5ms(假设),如果超时设置为20ms,那么只能发送4给字节,后续的字节就不发送了,通信就不正常了,而且是阻塞式的发送,只有发送完成了,才能执行后续的代码。所以通常只能用于
    数据量比较少的地方。
    HAL_UART_Receive_IT和HAL_UART_Transmit_DMA两个函数,没有超时,说明是非阻塞式发送,基本上不会占用cpu的太多的资源,而且发送完成有出发中断的功能。另外DMA的方式还有发送一半的中断,因此控制起来有多了一层功能。

    2、串口接收也有三个函数
    a、HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
    b、HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
    c、HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
    HAL_UART_Receive是阻塞式的接受函数,因此不建议使用,通常在开发过程中,基本上使用HAL_UART_Receive_IT和HAL_UART_Receive_DMA两个函数

    目前我使用中断接受数据,dma发送数据,基本没有问题,如果加上定时器来判断空闲,基本上就实现了modbus的数据协议了。

  • 相关阅读:
    django 模型层
    django 模板层
    django的视图层
    django-2的路由层(URLconf)
    django简介
    [Codeforces] 650A
    [codevs2916] 校门外的树2
    [Codevs 1690] 开关灯
    codevs3027线段覆盖2(DP)题解
    BC#65T4 ZYB's Tree
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/12007316.html
Copyright © 2011-2022 走看看