嵌入式系统使用GPIOC口的PIN4-PIN7连接4盏共阴极LED灯,使用寄存器方式编写程序实现LED灯GPIO端口硬件初始化函数LEDInit(),将PC4至PC7四根引脚设置为推挽方式的10MHz输出模式。
时间: 2024-05-05 12:22:38 浏览: 70
GPIO_LED.zip_gpio灯_stm32 GPIO LED
下面是使用寄存器方式编写的LED初始化函数LEDInit()的示例代码:
```c
#include "stm32f10x.h"
void LEDInit(void)
{
// 使能GPIOC时钟
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
// 设置PC4至PC7为推挽输出模式
GPIOC->CRL &= ~(GPIO_CRL_MODE4 | GPIO_CRL_MODE5 | GPIO_CRL_MODE6 | GPIO_CRL_MODE7);
GPIOC->CRL |= (GPIO_CRL_MODE4_0 | GPIO_CRL_MODE5_0 | GPIO_CRL_MODE6_0 | GPIO_CRL_MODE7_0);
// 设置PC4至PC7输出速度为10MHz
GPIOC->CRL &= ~(GPIO_CRL_SPEED4 | GPIO_CRL_SPEED5 | GPIO_CRL_SPEED6 | GPIO_CRL_SPEED7);
GPIOC->CRL |= (GPIO_CRL_SPEED4_0 | GPIO_CRL_SPEED5_0 | GPIO_CRL_SPEED6_0 | GPIO_CRL_SPEED7_0);
// 设置PC4至PC7为推挽输出模式
GPIOC->CRL &= ~(GPIO_CRL_CNF4 | GPIO_CRL_CNF5 | GPIO_CRL_CNF6 | GPIO_CRL_CNF7);
GPIOC->CRL |= (GPIO_CRL_CNF4_0 | GPIO_CRL_CNF5_0 | GPIO_CRL_CNF6_0 | GPIO_CRL_CNF7_0);
// 初始化LED灯状态为关闭状态
GPIOC->BSRR = GPIO_BSRR_BR4 | GPIO_BSRR_BR5 | GPIO_BSRR_BR6 | GPIO_BSRR_BR7;
}
```
在该函数中,首先通过使能GPIOC时钟的方式来使能GPIOC端口的时钟,然后设置PC4至PC7为推挽输出模式,并将输出速度设置为10MHz,最后将引脚设置为推挽输出模式。这样就完成了GPIO端口的硬件初始化。
需要注意的是,函数最后还初始化了LED灯的状态为关闭状态,这是因为LED灯是共阴极的,即LED灯需要通过将引脚置为低电平来点亮。因此,在初始化时需要将所有LED灯的引脚设置为低电平状态。如果不进行这一步操作,LED灯可能会在初始化时处于点亮状态,这并不是我们期望的结果。
阅读全文