STM32G431RBT6点灯第一课

        在蓝桥杯开发板中,控制led灯的引脚为(pc8~pc15)。这八个引脚分别控制八个led灯,由SN74HC573ADWR芯片锁存,但它的LE引脚输入为高电平时,(1D~8D)才能够与(1Q~8Q)逻辑相同。所以我们想要控制开发板上的LED灯,我们在cubemx里需要配置PC8~PC15和PD2的输出模式,这里我们配置为推挽模式。

GPIO_InitTypeDef GPIO_InitStruct = {0};

__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();//开启GPIOD的时钟

GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_8
                          |GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;//推挽输出
GPIO_InitStruct.Pull = GPIO_NOPULL;  //不设置上拉电阻
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;//输出口速度为low
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

        控制LED的亮灭,应该在它的位寄存器上控制,但stm32GPIO口太过于繁多,用HAL库函数,便可以实现亮灯的控制,根据原理图,当IO口输出为高电平时,LED灯灭,反之,亮。

void LED_control(uint8_t dsLED)
{
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET); //全部引脚置1
	HAL_GPIO_WritePin(GPIOC,dsLED<<8,GPIO_PIN_RESET);   //dsLED左移输出置0
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);   //LE置1,将现在的逻辑传到LED灯
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);	//LE置0,锁存逻辑,节省单片机资源
}

         SysTick时钟采用的是内部定时器,在生成的工程中,自动实现1ms的中断,每次中断实现uwTick++,我们可以根据这个值,来实现我们的延时函数,避免使用HAL_DELAY()堵塞程序,下面这个main函数里面的逻辑,完全可以用下面这个函数代替。在HAL_Delay()函数中,使用的uwTick作为延时的标记的,为了避免资源的浪费,我们直接将uwTick作为我们计时的标准,每500ms变换一次led状态,然后led_time = uwTick,实现下一次的计时。

int main(void)
{
  while(1)
 { 
   LED_Control(0x00);
   HAL_Delay(500);
   LED_Control(0xff);
   HAL_Delay(500);
 }
}
uint32_t led_time = 0;
uint8_t led_crl = 0xff;

void LED_Process(void)
{
   if(uwTick - led_time < 500) return;
   led_time = uwTick;
   LED_Control(led_vrl);
   led_crl = ~led_crl;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值