你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32H7 HAL库错误内容!!!

[复制链接]
STMCU小助手 发布时间:2021-12-22 14:33
stm32H7 hal库错误内容汇总:
1. I2S
  1. HAL_StatusTypeDef HAL_I2S_Transmit_IT(I2S_HandleTypeDef *hi2s, uint16_t *pData, uint16_t Size)
  2. 函数内部有一个判断
  3. if (hi2s->State == HAL_I2S_STATE_READY)  {
  4.     __HAL_UNLOCK(hi2s);
  5.     return  HAL_BUSY;
  6.   }
  7. 函数
  8.    HAL_StatusTypeDef HAL_I2SEx_TransmitReceive_IT(I2S_HandleTypeDef *hi2s, uint16_t *pTxData, uint16_t *pRxData, uint16_t Size)
  9. {
  10.   if (hi2s->State == HAL_I2S_STATE_READY)
  11.   {
  12.     __HAL_UNLOCK(hi2s);
  13.     return  HAL_BUSY;
  14.   }
  15.   中同样有
复制代码
应该改为:
  1. if (hi2s->State != HAL_I2S_STATE_READY)
复制代码

2.寄存器定义
我用的HAL库版本为V1.2.0;
其中Device中的STM32H743XX.h中寄存器定义错误。
  1. #define SPI_I2SCFGR_WSINV_Pos       (12U)                                      
  2. #define SPI_I2SCFGR_WSINV_Msk       (0x1U << SPI_I2SCFGR_WSINV_Pos)            /*!< 0x00001000 */
  3. #define SPI_I2SCFGR_WSINV           SPI_I2SCFGR_WSINV_Msk                      /*!<Word select inversion                             */
  4. #define SPI_I2SCFGR_FIXCH_Pos       (13U)                                      
  5. #define SPI_I2SCFGR_FIXCH_Msk       (0x1U << SPI_I2SCFGR_FIXCH_Pos)            /*!< 0x00002000 */
  6. #define SPI_I2SCFGR_FIXCH           SPI_I2SCFGR_FIXCH_Msk                      /*!<Fixed channel length in SLAVE                     */
  7. #define SPI_I2SCFGR_DATFMT_Pos      (12U)                                      
  8. #define SPI_I2SCFGR_DATFMT_Msk      (0x3U << SPI_I2SCFGR_DATFMT_Pos)           /*!< 0x00003000 */
  9. #define SPI_I2SCFGR_DATFMT          SPI_I2SCFGR_DATFMT_Msk                     /*!<Data format   
复制代码

20200303181433808.png



跟寄存器定义不同。

所以最好使用新的固件库,但项目之前用的旧固件库,并且没有用到I2s。

还是关于I2S的坑,这次使用的HAL库版本是在官网下载的最新版本
FW_H7_V1.5.0.在使用全双工I2S时,需要包含
stm32h7xx_hal_i2s_ex.h 头文件
但是
20200413000719519.png


图中宏定义根本找不到 ,自己添加宏定义后一堆错误 我也是服了。
有了SAI就对I2S这么不上心吗?
3.USB device卡死在HAL_PCD_IRQHandler中导致主程序无法运行
但并未出现错误
调试发现
程序一直进USB_OTG_DIEPINT_TXFE 即TX FIFO 为空中断
既然如TX FIFO 后 正常逻辑需要往TX FIFO 中填充数据 测试发现并没有,
发现 (USBx_INEP(epnum)->DTXFSTS & USB_OTG_DTXFSTS_INEPTFSAV) 刚好等于len32b导致条件不满足
又一直进FIFO为空中断 一直在中断中运行 形成死机现象
对比 HAL库1.5.0发现此处已更改为>=
更改后不会死机 但是 USB连接不上时仍需重启
库文件原代码 此BUG在F4驱动库中也存在 已更改
  1. PCD_WriteEmptyTxFifo 函数

  2. static HAL_StatusTypeDef PCD_WriteEmptyTxFifo(PCD_HandleTypeDef *hpcd, uint32_t epnum)
  3. {
  4.   USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;  
  5.   USB_OTG_EPTypeDef *ep = NULL;
  6.   int32_t len = 0U;
  7.   uint32_t len32b = 0U;
  8.   uint32_t fifoemptymsk = 0U;

  9.   ep = &hpcd->IN_ep[epnum];
  10.   len = ep->xfer_len - ep->xfer_count;

  11.   if (len > ep->maxpacket)
  12.   {
  13.     len = ep->maxpacket;
  14.   }


  15.   len32b = (len + 3) / 4;

  16.   while  ( (USBx_INEP(epnum)->DTXFSTS & USB_OTG_DTXFSTS_INEPTFSAV) > len32b &&
  17.           ep->xfer_count < ep->xfer_len &&
  18.             ep->xfer_len != 0)
  19.   {
  20.     /* Write the FIFO */
  21.     len = ep->xfer_len - ep->xfer_count;

  22.     if (len > ep->maxpacket)
  23.     {
  24.       len = ep->maxpacket;
  25.     }
  26.     len32b = (len + 3) / 4;

  27.     USB_WritePacket(USBx, ep->xfer_buff, epnum, len, hpcd->Init.dma_enable);

  28.     ep->xfer_buff  += len;
  29.     ep->xfer_count += len;
  30.   }

  31.   if(len <= 0)
  32.   {
  33.     fifoemptymsk = 0x1 << epnum;
  34.     USBx_DEVICE->DIEPEMPMSK &= ~fifoemptymsk;

  35.   }

  36.   return HAL_OK;  
  37. }
复制代码

需要更改为
  1.           while  ( (USBx_INEP(epnum)->DTXFSTS & USB_OTG_DTXFSTS_INEPTFSAV) >= len32b &&
  2.                           ep->xfer_count < ep->xfer_len &&
  3.                                 ep->xfer_len != 0)
复制代码
不然会一直进中断但又出不来

总结: 能用最新的HAL库就用最新的吧 可以避免很多坑
实在不行可以结合寄存器版本的函数来写,直接写寄存器还是比较靠谱,但是要参照HAL的流程




收藏 评论0 发布时间:2021-12-22 14:33

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版