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

STM32奇怪问题处理及驱动库 BUG 汇总(持续更新中)

[复制链接]
STMCU 发布时间:2020-11-16 14:43
STM32奇怪问题处理及驱动库 BUG 汇总(持续更新中)


在使用 STM32 的 MCU 开发过程中,难免遇到各种各样的奇葩问题。或许是开发环境的问题,或许是 MCU 使用的问题,也或许是驱动库的 BUG 等等。这些问题可能不局限于某一种具体型号的 MCU,特此把遇到的问题记录一下!


注意,如果没有特殊说明,默认的开发环境为 Win10 Pro 20H2 ,Keil uVision5 5.32!


在 KEIL 调试时部分寄存器不显示数据
现象
该问题是我在使用 STM32F103 调试时发现的。进入调试状态,观察某些外设的寄存器,发现有些寄存器不显示配置的值,而是始终显示 0。如下图:
11.png
问题
为了验证该问题,我同时也尝试了 Keil uVision4 4.74,也是如此!但是在其他系列的 MCU(例如 STM32F2x) 中并没有发现该问题!


原因
由于该问题仅仅出现在了 STM32F10 系列的 MCU中,所有严重怀疑是 Keil 和 该系列 MCU 配合不是很好导致的。但是一直没有找到具体原因!

有种感觉(或许就是),STM32F1 系列明显没有后续系列(例如 STM32F2x)用起来方便!


解决方法
通过修改 KEIL 的配置,可以使用其他方式来查看寄存器的值。需要注意的是,原来的寄存器还是显示异常的。具体如下图:
12.png


STM32F103 某些 IO 初始化后的参数配置不生效
现象
该问是我在使用 MCU 是 STM32F103RC,驱动库为 LL 库 的时候发现的。具体情况如下图:
13.png


原因
经过调试,这里是函数 LL_GPIO_Init 中的 BUG,在设置其他参数时,会把以上已经设置过的值异常更改!具体如下图:
经过测试,使用标准外设库不会有此问题!HAL 库暂未验证!

解决方法
知道了原因解决就轻而易举了。为了防止更改驱动库带来的后续麻烦,我选择的是在初始化之后重新配置一下 Speed 这个参数。具体如下:
  1. /* 时钟 */
  2. USART1_GPIO_CLK_ENABLE();
  3. /* 引脚 */
  4. LL_GPIO_Struct.Pin = USART1_TX_PIN;
  5. LL_GPIO_Init(USART1_TX_GPIOx, &LL_GPIO_Struct);
  6. /* !!!处理 LL库 的一个 BUG,导致 上面的参数 LL_GPIO_Struct.Speed 无法被正确设置!!! */
  7. /* !!!具体可调试 LL_GPIO_Init 中 的设置模式函数 LL_GPIO_SetPinMode!!! */
  8. LL_GPIO_SetPinSpeed(USART1_TX_GPIOx, USART1_TX_PIN, LL_GPIO_SPEED_FREQ_HIGH);
  9. LL_GPIO_Struct.Mode = LL_GPIO_MODE_FLOATING;
  10. LL_GPIO_Struct.Pin = USART1_RX_PIN;
  11. LL_GPIO_Init(USART1_TX_GPIOx, &LL_GPIO_Struct);
复制代码






14.png
收藏 1 评论0 发布时间:2020-11-16 14:43

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

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