【RISC-V MCU CH32V103测评】LED灯交替闪烁
[复制链接]
本帖最后由 jennyzhaojie 于 2021-1-26 00:20 编辑
板载的仅有外设资源要数LED灯了,其电路原理图如图1所示,那我们就用好它吧。
图1 LED电路原理图
其实使用LED灯的主要目的就是学习I/O的使用,值得点赞的是这2个LED灯是不占固定资源的,也就是说用到哪里连哪里。
那如何该如何实现LED灯的交替闪烁呢?
思路就是:
1)将2个I/O口设为输出,并使其与2个LED灯相连,这里用PA0控制LED1, 用PA1控制LED2;
2)使用变量i和j来控制高低电平的输出,并使2个I/O的高低电平输出在时间上错开, 令i=0时PA0输出高电平的语句为GPIO_WriteBit(GPIOA, GPIO_Pin_0, (i==0) ? (i=Bit_SET):(i=Bit_RESET)),令j=1时PA0输出低电平的语句为GPIO_WriteBit(GPIOA, GPIO_Pin_0, (i==0) ? (i=Bit_SET):(i=Bit_RESET));
3)使用延时函数按时对2个LED灯执行高低电平输出的状态切换,切换高低电平输出的语句为GPIO_WriteBit(GPIOx, GPIO_Pin_y, (z==0) ? (z=Bit_SET):(z=Bit_RESET)),延时函数为 Delay_Ms();
配置PA0和PA1为输出口的函数为:
- void GPIO_Toggle_INIT(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- }
其主程序为:
- int main(void)
- {
- u8 i=0,j=1;
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- Delay_Init();
- GPIO_Toggle_INIT();
-
-
- while(1)
- {
- Delay_Ms(250);
- GPIO_WriteBit(GPIOA, GPIO_Pin_0, (i==0) ? (i=Bit_SET):(i=Bit_RESET));
- GPIO_WriteBit(GPIOA, GPIO_Pin_1, (j==0) ? (j=Bit_SET):(j=Bit_RESET));
- }
- }
经编译,其编译结果如图2所示。
经下载,其运行效果如图3所示。
图3 运行效果
|