无法更改 LCD_CR 寄存器的值

Cannot change value of LCD_CR register

我目前正在玩 L152C 探索板,并尝试制作简单的时钟,该时钟将使用内置到 STM32 中的 RTC 和板载玻璃 LCD 以及通过 CubeMX 配置的 LCD HAL 库。 但我目前面临一个我无法解决的问题: CubeMX 没有在 LCD_CR 寄存器中启用段复用的选项。我想启用它,因为它会使段映射更容易。

所以我想,好吧,我将进行直接寄存器操作,启用多路复用器(LCD_CR 中的位 7)。 我使用命令 LCD->CR |= LCD_CR_MUX_SEG; 但即使在执行命令后,MUX_SEG 位仍然是 0。 (我在调试会话中检查了命令步进和 SFR 内存映射) 我做错了什么吗?或者是否有另一种方法来更改 CubeMX 配置但没有此设置选项的图形实现的初始化参数?

该应用程序正在使用 FreeRTOS,我在 HAL_LCD_Init(&hlcd); 之后执行了 LCD->CR |= LCD_CR_MUX_SEG;,所以我认为 LCD 外设时钟是 运行(段正在更新)。

我录制了一个展示这个问题的短片: https://youtu.be/0X6Zu5EPudU 老实说,我不擅长直接操作寄存器,所以我可能做错了。

如有任何帮助,我们将不胜感激!

正如@KIIV 所说:

RM0038 Liquid crystal display controller (LCD) Note: The VSEL, MUX_SEG, BIAS and DUTY bits are write protected when the LCD is enabled (ENS bit in LCD_SR to 1).

更改上述寄存器时必须禁用 LCD。