本文最后修改时间:2018年10月30日 18:48
一、本节简介
本文介绍STM8S系列如何编写多个自定义LED的控制。
二、实验平台
编译软件:IAR for STM8 1.42.2
硬件平台:stm8s003f3p6开发板
仿真器:ST-LINK
库函数版本:V2.0.0
三、版权声明
1)作者:甜甜的大香瓜
2)声明:喝水不忘挖井人,转载请注明出处。
3)纠错/业务合作:[email protected]
4)香瓜嵌入式之STM8/STM32群:164311667
5)本文出处:原创连载资料《简单粗暴学STM8和STM32》
6)完整开源资料下载地址(电脑端打开):opengua.taobao.com
四、实验前提
1、在进行本文步骤前,请先阅读以下章节:
1)《简单粗暴学STM8和STM32》的"第一章和第三章"章节。
2、在进行本文步骤前,请先实现以下章节:
1)《简单粗暴学STM8和STM32》的《STM8S之内外部16M晶振》。
五、基础知识
暂无
六、硬件原理

上图可知led灯与引脚对应关系,以及引脚低电平时亮灯、高电平时灭灯。
七、实验步骤
1 、工程中添加自己写的LED驱动
1 )写一个LED驱动GUA_Led.c(存放在工程的USER文件夹中)
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| //********************************************************************** //name: GUA_Led.c //introduce: LED驱动 //author: 甜甜的大香瓜 //email: [email protected] //QQ group: 香瓜单片机之STM8/STM32(164311667) //shop: opengua.taobao.com //changetime: 2019.08.03 //********************************************************************** #include "stm8s.h" #include "GUA_Led.h" //********************************************************************** //name: GUA_Led_Control //introduce: LED控制 //parameter: nGUA_Led_Control:GUA_Led_CONTROL_ON or GUA_Led_CONTROL_OFF //return: none //author: 甜甜的大香瓜 //email: [email protected] //QQ group: 香瓜单片机之STM8/STM32(164311667) //shop: opengua.taobao.com //changetime: 2019.08.03 //********************************************************************** void GUA_Led_Control(GUA_U8 nGUA_Led,GUA_U8 nGUA_Led_Control) { switch(nGUA_Led) { //LED1 case GUA_LED1: { //开灯 if(nGUA_Led_Control == GUA_LED_CONTROL_ON) { GPIO_WriteLow(GUA_LED1_PORT, GUA_LED1_PIN); } //关灯 else { GPIO_WriteHigh(GUA_LED1_PORT, GUA_LED1_PIN); } break; } //LED2 case GUA_LED2: { //开灯 if(nGUA_Led_Control == GUA_LED_CONTROL_ON) { GPIO_WriteLow(GUA_LED2_PORT, GUA_LED2_PIN); } //关灯 else { GPIO_WriteHigh(GUA_LED2_PORT, GUA_LED2_PIN); } break; } //LED3 case GUA_LED3: { //开灯 if(nGUA_Led_Control == GUA_LED_CONTROL_ON) { GPIO_WriteLow(GUA_LED3_PORT, GUA_LED3_PIN); } //关灯 else { GPIO_WriteHigh(GUA_LED3_PORT, GUA_LED3_PIN); } break; } //LED4 case GUA_LED4: { //开灯 if(nGUA_Led_Control == GUA_LED_CONTROL_ON) { GPIO_WriteLow(GUA_LED4_PORT, GUA_LED4_PIN); } //关灯 else { GPIO_WriteHigh(GUA_LED4_PORT, GUA_LED4_PIN); } break; } //LED1 default:break; } } //********************************************************************** //name: GUA_Led_Init //introduce: 继电器初始化 //parameter: none //return: none //author: 甜甜的大香瓜 //email: [email protected] //QQ group: 香瓜单片机之STM8/STM32(164311667) //shop: opengua.taobao.com //changetime: 2019.08.03 //********************************************************************** void GUA_Led_Init(void) { //LED初始化 GPIO_Init(GUA_LED1_PORT, GUA_LED1_PIN, GUA_LED1_MODE); GPIO_Init(GUA_LED2_PORT, GUA_LED2_PIN, GUA_LED2_MODE); GPIO_Init(GUA_LED3_PORT, GUA_LED3_PIN, GUA_LED3_MODE); GPIO_Init(GUA_LED4_PORT, GUA_LED4_PIN, GUA_LED4_MODE); } |
2 )写一个LED驱动头文件GUA_Led.h(存放在工程的USER文件夹中)
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| //********************************************************************** //name: GUA_Led.h //introduce: LED驱动的头文件 //author: 甜甜的大香瓜 //email: [email protected] //QQ group: 香瓜单片机之STM8/STM32(164311667) //shop: opengua.taobao.com //changetime: 2019.08.03 //********************************************************************** #ifndef GUA_LED_H #define GUA_LED_H /*********************宏定义************************/ //类型宏 #ifndef GUA_C typedef char GUA_C; #endif #ifndef GUA_U8 typedef unsigned char GUA_U8; #endif #ifndef GUA_8 typedef signed char GUA_8; #endif #ifndef GUA_U16 typedef unsigned short GUA_U16; #endif #ifndef GUA_16 typedef signed short GUA_16; #endif #ifndef GUA_U32 typedef unsigned long GUA_U32; #endif #ifndef GUA_32 typedef signed long GUA_32; #endif #ifndef GUA_U64 typedef unsigned long long GUA_U64; #endif #ifndef GUA_64 typedef signed long long GUA_64; #endif //LED引脚宏 #define GUA_LED1_PORT GPIOC #define GUA_LED1_PIN GPIO_PIN_7 #define GUA_LED1_MODE GPIO_MODE_OUT_PP_HIGH_FAST #define GUA_LED2_PORT GPIOC #define GUA_LED2_PIN GPIO_PIN_6 #define GUA_LED2_MODE GPIO_MODE_OUT_PP_HIGH_FAST #define GUA_LED3_PORT GPIOC #define GUA_LED3_PIN GPIO_PIN_5 #define GUA_LED3_MODE GPIO_MODE_OUT_PP_HIGH_FAST #define GUA_LED4_PORT GPIOC #define GUA_LED4_PIN GPIO_PIN_4 #define GUA_LED4_MODE GPIO_MODE_OUT_PP_HIGH_FAST //LED序号宏 #define GUA_LED1 0 #define GUA_LED2 1 #define GUA_LED3 2 #define GUA_LED4 3 //LED开关控制宏 #define GUA_LED_CONTROL_ON 0 #define GUA_LED_CONTROL_OFF 1 /*********************外部函数声明************************/ void GUA_Led_Control(GUA_U8 nGUA_Led,GUA_U8 nGUA_Led_Control); void GUA_LED_Init(void); #endif |
3 )工程中添加GUA_Led.c

4 )添加驱动的路径
|----------------------|
| PROJ_DIR\..\USER |
注意USER文件夹是与"Project"、"FWlib"文件夹同级的自定义文件,用于存放香瓜写的代码。
3 、添加库的驱动
1 )添加库的驱动文件

2 )添加库的驱动头文件(stm8s_conf.h中)
|-------------------------|
| #include "stm8s_gpio.h" |
3 、应用层中调用
1 )添加头文件(main.c中)
|----------------------|
| #include "GUA_Led.h" |
2 )添加初始化(main.c的main函数中)
|----------------------------|
| //LED控制初始化 GUA_Led_Init(); |
3 )添加测试代码(main.c的main函数中)
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| //LED测试 GUA_Led_Control(GUA_LED1, GUA_LED_CONTROL_ON); //开灯 GUA_Led_Control(GUA_LED2, GUA_LED_CONTROL_ON); //开灯 GUA_Led_Control(GUA_LED3, GUA_LED_CONTROL_ON); //开灯 GUA_Led_Control(GUA_LED4, GUA_LED_CONTROL_ON); //开灯 GUA_Led_Control(GUA_LED1, GUA_LED_CONTROL_OFF); //关灯 GUA_Led_Control(GUA_LED2, GUA_LED_CONTROL_OFF); //关灯 GUA_Led_Control(GUA_LED3, GUA_LED_CONTROL_OFF); //关灯 GUA_Led_Control(GUA_LED4, GUA_LED_CONTROL_OFF); //关灯 |
八、注意事项
暂无
九、实验结果
会依次点亮板子的LED1~LED4,然后又依次熄灭LED1~LED4。
因此,实验成功。