一.硬件原理图

有两个LED灯D1,D2,分别对应的PIN是PB6,PB7,低电平时点亮LED灯

二.寄存器图

通用GPIO寄存器一共有以下几个寄存器

寄存器可以参考 参考手册,在这里不做详细讨论

三.编程步骤:

1.      使能响应的GPIO时钟

2.      配置通用GPIO为推挽输出(因为默认低电平,所以此时LED灯会亮起来)

3.      输出低电平,熄灭LED灯

4.      再次通过程序点亮LED灯

四.程序讲解

代码比较简单,只有几行

/* 1.ENABLE GPIOB CLOCK */
RCC->APB2ENR|= RCC_APB2ENR_IOPBEN;

运行这个,可以在debug中看到GPIOB clock由disable变为enable

/* 2.CONFIG PB6 PB7 */
GPIOB->CRL|= GPIO_CRL_MODE6 | GPIO_CRL_MODE7;

此时发现PB6,PB7按照我们预期配置的那样变为输出模式

 

/* 3. PB6PB7 HIGH */
GPIOB->ODR|= GPIO_ODR_ODR6 | GPIO_ODR_ODR7;

此时可以看到ODR寄存器bit6,bit7被置1,此时LED灯熄灭

/* 4. PB6PB7 LOW */
GPIOB->ODR&=  ~(GPIO_ODR_ODR6 | GPIO_ODR_ODR7);

执行到这的时候再次点亮LED灯


OK,通用GPIO就到这里了


另外:此处遗留一个问题,为什么运行到第四步的时候bit4也消失了呢?

->bit 4是Jlink的PIN脚,可能Jlink自己拉到低

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐