Я пытался, но ничего. Если я вставляю GPIOA_ODR = (uint32_t*)(0x40020000 + 0x14);
, это работает, вместо этого, если я вставляю GPIOA_ODR = (uint32_t*)(GPIOA + 0x14);
, это не работает. Некоторые другие идеи?
Большое спасибо за ответ. Полный код, который я использую, следующий:
int main(int argc, char* argv[])
{
/** RCC **/
/* RCC */
volatile uint32_t *RCC = 0x0;
RCC = (uint32_t*)0x40023800;
/* RCC_AHB1ENR */
volatile uint32_t *RCC_AHB1ENR = 0x0;
RCC_AHB1ENR = (uint32_t*)(0x40023800 + 0x30);
*RCC_AHB1ENR |= 0x1;
/** GPIOA **/
/* GPIOA */
volatile uint32_t *GPIOA = 0x0;
GPIOA = (uint32_t*)0x40020000;
/* GPIOA_MODER */
volatile uint32_t *GPIOA_MODER = 0x0;
GPIOA_MODER = (uint32_t*)(0x40020000 + 0x00);
*GPIOA_MODER |= 1 << 16;
*GPIOA_MODER &= ~(0 << 17);
/* GPIOA_ODR */
volatile uint32_t *GPIOA_ODR = 0x0;
GPIOA_ODR = (uint32_t*)(GPIOA + 0x14);
*GPIOA_ODR |= 1 << 8;
}
Этот код работает неправильно из-за строки GPIOA_ODR = (uint32_t*)(GPIOA + 0x14);
. Если я вставлю GPIOA_ODR = (uint32_t*)(0x40020000 + 0x14)
, он будет работать правильно.