[AT32F437] GPIO写保护功能小用一下

[复制链接]
1569|3
水之呢喃 发表于 2025-9-29 15:41 | 显示全部楼层 |阅读模式

给项目添加一个小功能——GPIO写保护功能,我们的项目MCU通过一个引脚控制着电源芯片的使能引脚,在上电启动后,将此引脚拉低即可使能整个系统运行。添加GPIO写保护功能后,此引脚不会再被意外修改,最大限度上规避程序问题导致系统宕机的可能性。

查看datasheet时,GPIO写保护锁定功能内容较少,仅GPIOx_WPR.bit16一个标志位来标识,特别简单。但又比较复杂,因为配置GPIO写保护成功需要一个配置序列来实现,而非一个简简单单的置位。具体配置序列如下:

写保护使能位操作按照以下方式操作 4 次,写’1’ -> 写’0’ -> 写’1’ ->读,操作期间 WPEN 位值不可修改。

看着有点复杂,而且也不知道具体要如何操作?还好!雅特力官方的代码库实现了GPIO写保护锁定功能的API,直接调用即可:

/**
  * [url=/u/brief]@brief[/url]  write protect gpio pins configuration registers.
  * @param  gpio_x: to select the gpio peripheral.
  *         this parameter can be one of the following values:
  *         GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH.
  * @param  pins: gpio pin number
  *         this parameter can be any combination of the following:
  *         - GPIO_PINS_0
  *         - GPIO_PINS_1
  *         - GPIO_PINS_2
  *         - GPIO_PINS_3
  *         - GPIO_PINS_4
  *         - GPIO_PINS_5
  *         - GPIO_PINS_6
  *         - GPIO_PINS_7
  *         - GPIO_PINS_8
  *         - GPIO_PINS_9
  *         - GPIO_PINS_10
  *         - GPIO_PINS_11
  *         - GPIO_PINS_12
  *         - GPIO_PINS_13
  *         - GPIO_PINS_14
  *         - GPIO_PINS_15
  *         - GPIO_PINS_ALL
  * @retval none
  */
void gpio_pin_wp_config(gpio_type *gpio_x, uint16_t pins)
{
  uint32_t temp = 0x00010000;

  temp |= pins;
  /* set wpen bit */
  gpio_x->wpr = temp;
  /* reset wpen bit */
  gpio_x->wpr =  pins;
  /* set wpen bit */
  gpio_x->wpr = temp;
  /* read wpen bit*/
  temp = gpio_x->wpr;
  /* read wpen bit*/
  temp = gpio_x->wpr;
}

看了这段示例代码,我发现文档的表述还是简单了。感觉文档的表述忽略了一个技术点——只有在序列中的GPIOx_WPR.bit16 = 0时,写入要保护的GPIO引脚才起效。

我看文档里面还标注上述序列要顺序执行4次,以保证GPIO写保护功能被成功写入。

我倒是觉得在执行一次写保护序列后,回读一下结果。如果结果已经写保护,应该就不需要再重复执行了。

观星者宁静 发表于 2025-9-30 11:24 | 显示全部楼层
确实比使用外部电路省钱,性价比高
灰色与青 发表于 2025-10-8 16:06 | 显示全部楼层
GPIO写保护功能是一种硬件或软件机制,用于防止对GPIO控制寄存器(如输出数据寄存器)的意外或恶意修改。
其原理通常是通过一个特殊的保护寄存器或口令来实现。一旦启用写保护,对受保护GPIO组的配置或输出电平的写操作将被硬件忽略,直至通过特定序列(如输入正确口令)解除保护。这能增强系统在复杂程序或噪声环境下的可靠性,防止关键信号(如复位、使能脚)被干扰而产生误动作。

小小蚂蚁举千斤 发表于 2025-10-16 17:15 | 显示全部楼层
GPIO写保护功能增加系统的稳定运行
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

23

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部