无法更改LCD_CR寄存器的值

问题描述

我目前正在使用L152C discovery板,并试图制作简单的时钟,该时钟将使用STM32和通过 CubeMX 配置的LCD HAL库的板载Glass LCD使用RTC。 但我目前遇到一个无法解决的问题: CubeMX没有启用LCD_CR寄存器中的段多路复用器的选项。我想启用它,因为它会使段映射更容易。

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

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

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

任何帮助将不胜感激!?

解决方法

正如@KIIV 所说:

RM0038 液晶显示控制器 (LCD) 注意:当 LCD 使能(LCD_SR 中的 ENS 位为 1)时,VSEL、MUX_SEG、BIAS 和 DUTY 位被写保护。

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