C8T6超绝模块--LED
大纲
- 怎样点亮LED
- 结构体分析
- 代码流程
具体案例
怎样点亮LED
首先不同的芯片的接法不一样,需要自己查看自己的芯片的原理图,我使用的是C8T6,使用的PC13接入的LED
注意看:怎么才能使LED灯亮呢?
如图一边接入的是3.3V的外接电压,而我们需要电流流过需要PC13是低电压,这样有电势差才会使产生电流让小灯亮,初始化时我们一般控制默认接入高电压,使其不亮
结构体分析
下面带来的是GPIO的结构体和其成员
cpp
typedef struct
{
uint16_t GPIO_Pin; // 决定是哪个引脚
GPIOSpeed_TypeDef GPIO_Speed; // 确定GPIO传输的速度
GPIOMode_TypeDef GPIO_Mode; // 确定GPIO的工作模式
}GPIO_InitTypeDef;
代码流程
- 首先我们应该打开时钟,只有打开时钟才能工作
- 配置GPIO
- 初始化GPIO
下面是LED灯的GPIO的初始化函数
LED灯的GPIO的初始化函数
cpp
void LED_GPIO_Config(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin = LED_G_GPIO_PIN;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(LED_G_GPIO_PORT, &GPIO_InitStruct);
}
注意:具体打开哪个时钟还是要通过查阅数据手册,看我们需要初始化的外设具体在哪个线程上,我们这里端口GPIOC在APB2的线程上,所以调用的是APB2时钟的打开函数
点灯或熄灭灯(LED的H文件)
其实,灯的亮灭是通过高低电压来控制的
cpp
#define ON 1
#define OFF 0
// \C语言里面的续航符,要求后面不能有任何东西
#define LED_G(a) if(a)\
GPIO_ResetBits(GPIOC,GPIO_Pin_13); \
else \
GPIO_SetBits(GPIOC,GPIO_Pin_13);
而我们这里的 GPIO_ResetBits 和 GPIO_SetBits 两个函数是给指定的端口的引脚写入高低电压,
根据传入的a是ON或者OFF来写入电压
补充一个小灯反转的函数
cpp
// ^ 异或,相同为0,不同为1
// 通过下面的异或可以实现每次按键就改变LED灯的ODR寄存器状态
#define LED_G_TOGGLE {LED_G_GPIO_PORT ->ODR ^= LED_G_GPIO_PIN;}
main函数
cpp
void Delay( uint32_t count)
{
for(;count != 0;count--);
}
int main(void)
{
LED_GPIO_Config();
while(1)
{
// GPIO_SetBits(GPIOC,GPIO_Pin_13);
LED_G(OFF);
Delay(0xFFFFF);
// GPIO_ResetBits(GPIOC,GPIO_Pin_13);
LED_G(ON);
Delay(0xFFFFFF);
}
}
至此代码结束