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提供的处理函数,中断处理程序中直接判断中断标志位接收数据,并清除中断标志。

  • 相关阅读:
    u盘的超级用法
    文件夹访问被拒绝
    web移动前端的click点透问题
    call()apply()ind()备忘录
    Safari中的new Date()格式化坑
    dataURI V.S. CSS Sprites 移动端
    css3属性之 box-sizing
    多人协作代码--公共库的引用与业务约定
    web前端本地测试方法
    依赖包拼合方法
  • 原文地址:https://www.cnblogs.com/chenbeibei/p/11404296.html
Copyright © 2011-2022 走看看