所以我必须将代码从 STM32F4xx 设备移植到 STM32F10x 设备。一切都很顺利,我很快就取得了巨大的进步。但后来它击中了我!在软件中的某一时刻有以下定义
#define BYTE_GPIO (*((__IO uint8_t *)(GPIOE_BASE + 0x0C + 1)))
这显然定义了对 GPIOE ODR 寄存器的高字节的访问。虽然这在 STM32F4x 设备中工作正常(正如我被告知的那样),因为它们支持对该寄存器的字节访问,但它不适用于 stm32F10x 设备。这在 RM 中也有说明:
这些位可以通过软件读取和写入,并且只能在字模式下访问。
首先我忽略了这条语句,只是尝试了一下:代码编译良好,没有任何错误或警告,甚至对GPIOE高字节的写入也会执行良好,但很快我发现GPIOE的低字节受到了影响也对 BYTE_GPIO 进行任何写入。由于这显然不可用,我必须找到其他解决方案。但由于我不想更改很多应用程序层代码,我宁愿以某种方式修复这个定义。不幸的是,我不知道如何。所以我愿意接受。谢谢。