STM8L151C8学习笔记1:LED驱动
按以往的单片机开发流程,第一步先来点个灯。
基于STM8与STM32同属STM系列,要想点亮一个灯,所需步骤不过就三步:
-
开启相应时钟
-
初始化GPIO模式
-
拉高/置低来点亮LED
硬件电路
主控
部分:
LED
电路:
代码编写
1.led.c
部分内容如下:
#include "led.h"
/*GPIO*/
#define LED_PORT GPIOA
#define LED1_PIN GPIO_Pin_6
#define LED2_PIN GPIO_Pin_7
/*LED*/
#define LED1 GPIO_Pin_6
#define LED2 GPIO_Pin_7
/*Functions*/
void Led_Init(void)
{
/*GPIO Init*/
GPIO_Init(LED_PORT,LED1_PIN|LED2_PIN,GPIO_Mode_Out_PP_Low_Slow);
/*Led Init*/
GPIO_ResetBits(LED_PORT, LED1_PIN|LED2_PIN);
}
void Led_Set(GPIO_Pin_TypeDef ledx, uint8_t state)
{
if(state == 1) GPIO_SetBits(LED_PORT,ledx);
else GPIO_ResetBits(LED_PORT,ledx);
}
2.main.c
部分内容如下:
/* Includes ------------------------------------------------------------------*/
#include "stm8l15x.h"
#include "led.h"
/* Parameter Definition ------------------------------------------------------------------*/
uint8_t LED1_State = 1,LED2_State = 0;
/* Functions ------------------------------------------------------------------*/
/**
* @brief CLK Config.
* @param None
* @retval None
*/
void Clk_Config(void)
{
CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);//系统1分频,16M
}
/**
* @brief LED Flash.
* @param None
* @retval None
*/
void LED_Flash(void)
{
Led_Set(LED2, LED2_State);
Led_Set(LED1, LED1_State);
LED1_State = !LED1_State;
LED2_State = !LED2_State;
Delay_ms(500);
}
/* Main Functions ------------------------------------------------------------------*/
/**
* @brief Main program.
* @param None
* @retval None
*/
int main(void)
{
/*System Init*/
Clk_Config();
Led_Init();
/* Infinite loop */
while (1)
{
LED_Flash();
}
}
其中Delay_ms()
函数之前自己尝试写过,发现延时时间并不精准后,借鉴了大佬写的delay代码。
总结
LED点灯相对简单,因为STM8与STM32不同,其中GPIO并没有单独的时钟,所以只需确定Delay函数的时钟就好了。