STM32
直播中

bigbangboom

9年用户 1400经验值
擅长:电源/新能源
私信 关注
[问答]

STM32G4如何把BOOT0当作通用GPIO使用?

MyType mysymbol;
/* USER CODE END 0 */
FLASH_OBProgramInitTypeDef    OBInit;

int main(void)
{

  HAL_Init();

  /* USER CODE BEGIN Init */
   HAL_FLASH_Unlock();
         HAL_FLASH_OB_Unlock();
         HAL_FLASHEx_OBGetConfig( OBInit);
         OBInit.OptionType = OPTIONBYTE_USER;
         OBInit.USERType   = OB_USER_nBOOT0;
         OBInit.USERConfig = OB_nBOOT0_SET;
         HAL_FLASHEx_OBProgram ( OBInit);
         OBInit.OptionType = OPTIONBYTE_USER;
         OBInit.USERType   = OB_USER_nSWBOOT0;
         OBInit.USERConfig = OB_BOOT0_FROM_OB;
         HAL_FLASHEx_OBProgram ( OBInit);
         HAL_FLASH_OB_Lock();
         HAL_FLASH_Lock();
        //这段代码的功能:重新定义BOOT0,BOOT0的数据不在从外部PIN获取,而是从内部nSWBOOT0+NBOOT0获取,当前定义,BOOT from Main Flash ;
  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */
  EventRecorderInitialize(EventRecordAll,1U);
        EventRecorderStart();     //这段代码使能EVENTRECORDER ,可以使用没有SWO口的ST Link  做打印debug ;
  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_TIM1_Init();


回帖(1)

陈键

2024-4-3 16:15:55
以下是将STM32G4的BOOT0引脚用作通用GPIO的方法:

1. 在main函数中,首先进行HAL库的初始化操作。

2. 调用HAL_FLASH_Unlock()函数解锁flash,以便对其进行操作。

3. 调用HAL_FLASH_OB_Unlock()函数解锁option byte,以便修改option byte的配置。

4. 定义一个FLASH_OBProgramInitTypeDef类型的结构体OBInit,用于保存option byte的配置。

5. 调用HAL_FLASHEx_OBGetConfig()函数获取当前option byte的配置,并将配置保存在OBInit结构体中。

6. 将OBInit.OptionType设置为OPTIONBYTE_USER,表示我们要修改用户自定义的option byte。

7. 接下来就可以根据实际需求,通过修改OBInit结构体的成员变量来配置option byte。

8. 最后,将option byte的配置写入flash中,调用HAL_FLASHEx_OBProgramConfig()函数进行配置的更新。

注意:在写入option byte之前,必须先将ERASE和WRPERR标志位清零,以确保flash擦除和写入操作可以正常进行。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分