ST意法半导体
直播中

张鑫

7年用户 1071经验值
私信 关注
[问答]

使用Nucleo-32板向EEPROM写入一些字节,MCU卡在HAL_Delay中怎么解决?

大家好,

我正在使用 Nucleo-32 板(带有 STM32G431KBTx)并且遇到了一些问题......
在我的项目中,我正在使用:
-> UART(这里我使用 RX-DMA 并使用 IDLE 标志中断)
-> ADC,一个通道
-> 带 EEPROM 的 I²C(无 DMA,无中断)

问题和尝试的解决方案
问题 1:如果我向 EEPROM 写入一些字节(为此我使用 HAL_I2C_Mem_Write(...)),并在写入页面后等待 5 毫秒,MCU 将永远卡在HAL_Delay中。经过一番谷歌搜索后,我找到了解决方案,增加 Systick_Handler 的中断优先级。好的,我所有的中断都有 0 作为“抢占优先级”,所以我配置了这样的优先级:
修复后,从 EEPROM 读取/写入 EEPROM 运行起来就像一个魅力。

但:
UART 通信中断。这意味着,我通过发送一个字符(即 V)从 MCU 请求一些数据(恰好 70 个字节),但我只得到 65 个字节,或 67 个字节,或 70 个字节,或 64 个字节......所以它不是确定性的,但在 98% 的请求中,我得到的请求少于 70 字节......

如果我将所有优先级设置为 0,则 uart 通信正常,但 HAL_Delay 卡住...

有任何想法吗?我附上了整个项目(STM32CubeIDE 1.10.1)


回帖(1)

唐瑶

2022-12-26 15:07:52
主要不要在中断例程中使用 haldelay。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分