无法更改 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。
我目前正在玩 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。