[N32G03x] GPIO锁定机制

[复制链接]
 楼主| sy12138 发表于 2022-8-29 10:53 | 显示全部楼层 |阅读模式
在使用GPIO的时候,为了防止有些已经配置的GPIO被不小心重新配置,这里可以使用GPIO锁定机制,对GPIO的端口模式寄存器GPIO_PMODE,输出模式寄存器GPIO_POTYPE,端口上下拉寄存器GPIO_PUPD,翻转速率寄存器GPIO_SR,驱动能力寄存器GPIO_DC,复用寄存器GPIO_AF等寄存器进行锁定,锁定之后就不可以重新配置了。这里用到的寄存器是GPIO_PLOCK寄存器,寄存器描述如下,通过GPIOx_PLOCK[0:15]选择需要锁定的IO口,对16位即PLOCKK位写1、写0、写1、读0便可成功锁定GPIO了
224b2ce93f6d91494ef45c66ed8dd0d.png
 楼主| sy12138 发表于 2022-8-29 11:00 | 显示全部楼层
测试代码如下:
  1.          LedInit(GPIOB, GPIO_PIN_1 | GPIO_PIN_6 | GPIO_PIN_7);
  2.          LedOn(GPIOB, GPIO_PIN_1 | GPIO_PIN_6 | GPIO_PIN_7);
  3.              //Delay(0x28FFFF);
  4.              RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOB|RCC_APB2_PERIPH_GPIOA|RCC_APB2_PERIPH_AFIO, ENABLE);

  5.             
  6.              GPIOB->PLOCK = 0x10002;  //PLOCKK写1   
  7.                  GPIOB->PLOCK = 0x00002;  //PLOCKK写0   
  8.                  GPIOB->PLOCK = 0x10002;  //PLOCKK写1
  9.                
  10.                  read = GPIOB->PLOCK;  //读0
  11.                  read = GPIOB->PLOCK;  //读1
  12.        
  13.                  GPIO_InitStruct(&GPIO_InitStructure);
  14.          GPIO_InitStructure.Pin = GPIO_PIN_1 | GPIO_PIN_6 | GPIO_PIN_7;
  15.          GPIO_InitStructure.GPIO_Mode = GPIO_MODE_INPUT;
  16.          GPIO_InitPeripheral(PORT_GROUP, &GPIO_InitStructure);
  17. while (1)
  18.     {

  19.       LedBlink(PORT_GROUP, LED1_PIN | LED2_PIN | LED3_PIN);
  20.       Delay(0x28FFFF);
  21.     }
复制代码
可以看到代码中将PB1锁定,然后对PB1、PB6、PB7重新配置,再进行翻转。如图所示,只有PB1控制的LED在闪烁,PB6、PB7控制的LED熄灭
432542185f373212e33048d62774049.jpg
您需要登录后才可以回帖 登录 | 注册

本版积分规则

92

主题

404

帖子

19

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