【stm32f103】GPIO原理以及LED的应用(寄存器版)

一.硬件原理图

【stm32f103】GPIO原理以及LED的应用(寄存器版)_第1张图片

有两个LEDD1,D2,分别对应的PINPB6,PB7,低电平时点亮LED

二.寄存器图

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

【stm32f103】GPIO原理以及LED的应用(寄存器版)_第2张图片

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

三.编程步骤:

1.      使能响应的GPIO时钟

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

3.      输出低电平,熄灭LED

4.      再次通过程序点亮LED

四.程序讲解

代码比较简单,只有几行

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

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

【stm32f103】GPIO原理以及LED的应用(寄存器版)_第3张图片【stm32f103】GPIO原理以及LED的应用(寄存器版)_第4张图片

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

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

 【stm32f103】GPIO原理以及LED的应用(寄存器版)_第5张图片

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

【stm32f103】GPIO原理以及LED的应用(寄存器版)_第6张图片

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

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

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

【stm32f103】GPIO原理以及LED的应用(寄存器版)_第7张图片


OK,通用GPIO就到这里了


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

->bit 4JlinkPIN脚,可能Jlink自己拉到低

你可能感兴趣的:(stm32应用)