STM32F0xx HAL 库使用问题记录

Posted chenbeibei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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提供的处理函数,中断处理程序中直接判断中断标志位接收数据,并清除中断标志。

以上是关于STM32F0xx HAL 库使用问题记录的主要内容,如果未能解决你的问题,请参考以下文章

笔记之STM32F0芯片SPI_DMA的使用(HAL库)

笔记之STM32F0芯片SPI_DMA的使用(HAL库)

STM32F0 中 ADC 多通道转换结果相同的问题

STM32F0xx_USART收发配置详细过程

STM32F0xx_EXIT中断配置详细过程

STM32F0xx_TIM输入捕获(计算频率)配置详细过程