zoukankan      html  css  js  c++  java
  • STM32F0xx HAL 库使用问题记录

    1. SPI 数据收发函数HAL_SPI_xxx传入传出 buf 指针地址必需16位对齐

    例如,SPI收发数据函数HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout)
    pTxData和pRxData,必需16位对齐,若不能保证16位对齐,可以在调用SPI收发函数之情,申请两个16位对齐的buf替代原有的buf进行SPI收发数据,示例如下:

    HAL_StatusTypeDef spiTxRx(const uint8_t *txData, uint8_t *rxData, uint16_t length)
    {
        HAL_StatusTypeDef ret;
        
        /* txbuf, rxbuf 地址是16位对齐的,可作为SPI收发函数的参数 */
        uint8_t txbuf[255];
        uint8_t rxbuf[255];
        
        /* 将SPI要发送的数据拷贝到txbuf */
        if(txData != NULL) {
            memcpy(rxbuf, txData, length);
        }
        
        /* 使用txbuf和rxbuf进行SPI数据收发 */
        ret = HAL_SPI_TransmitReceive(hspi, txbuf, rxbuf, length, Timeout);
    
        /* 将SPI接收的数据拷回rxData */
        if(rxData != NULL) {
            memcpy(rxData, rxbuf, length);
        }
        
        return ret;
    }
    

    2. 使用HAL库提供的串口接收中断处理函数,需要在中断处理中再次调用HAL_UART_Receive_IT使能串口接收中断,此函数调用可能会失败,导致串口接收中断未使能,无法通过串口接收中断接收数据

    HAL库提供的串口接收中断API使用方法:

    1. 中断处理程序中调用HAL_UART_IRQHandler,此函数中会除能串口接收中断、调用HAL_UART_RxCpltCallback
    2. 实现HAL_UART_RxCpltCallback,在此函数中接收串口数据,并再次调用HAL_UART_Receive_IT使能串口接收中断,此时可能会失败,导致不能再次进入串口接收中断。

    解决方法:不使用HAL提供的处理函数,中断处理程序中直接判断中断标志位接收数据,并清除中断标志。

  • 相关阅读:
    滚动新闻的实现
    使用DLC(Dynamic Loader Compatibility)函数提取iPhone当前运营商信号的强度
    iOS设备中WiFi、蓝牙和飞行模式的开启与关闭
    如何在Typora中使用流程图
    连接池的使用场景
    Mybatisplus入门教程(一)
    mybatis第一篇
    Mybatis需要注意的细节
    测试代码着色插件
    (转)企业Elearning的产业链与业务模式
  • 原文地址:https://www.cnblogs.com/chenbeibei/p/11404296.html
Copyright © 2011-2022 走看看