按以往的单片机开发流程,第一步先来点个灯。
基于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函数的时钟就好了。
上一篇:STM8S003 上升沿进不去外部中断问题
下一篇:单片机C语言程序与数据存储
推荐阅读最新更新时间:2024-11-10 10:21
推荐帖子
- 求指点AD630锁相电路检测微弱信号
- 按照芯片资料上接的不行啊·不知道是不是接法不对··求大神指点正确接法··求指点AD630锁相电路检测微弱信号这个,你做出来了吗? 你好
- xz19921230 ADI参考电路
- skyline中添加 gps 坐标
- 在skyline的terraexplorer中如何添加gps坐标如何从gps中直接倒入坐标点skyline中添加gps坐标通过串口读取GPSNMEA数据,并按照规范从中获取坐标。
- ld21502839 嵌入式系统
- 【Follow me第二季第2期】Arduino Uno R4 WiFi 通过MQTT连入Home Assistant(容器版)
- 1.安装Docker(系统windows10及以上,其余系统未进行测试。另外如果有树莓派、NAS的用户也可以自行安装HAOS,Linux或虚拟机用户安装对应的版本).2.Docker中拉取HomeAssistant镜像在windows命令行中输入以下命令搜索镜像,dockersearchhome-assistant回车后可以看到排名第一的homeassistant/home-assistant;输入以下命令拉取最新版本镜像dockerpul
- sunduoze DigiKey得捷技术专区
- igbt问题
- 请问高手:IGBT驱动波形,什么样算正常。我的电路中给IGBT全桥加上直流电压后,栅极驱动波形上就会有高次谐波(在上升和下降沿附近)如何解决。谢谢igbt问题
- lanq 工控电子
- 电柜改成电路板求助及变频器的干扰
- 电柜中包含PLC中间继电器变频器PLC控制变频器能否把这个电路改成电路板而且如何抑制变频器对电路板的干扰谢谢电柜改成电路板求助及变频器的干扰求助哈“PLC中间继电器变频器PLC控制变频器”,“能否把这个电路改成电路板”你看看这些继电器、变频器等等是用多粗的导线联接的,这些继电器、变频器等等体积有多大,再考虑你的电路板上铜箔能否承受这么大的电流,能否承受这么大的重量。工业现场不建议改,一般的PLC针对现场的复杂环境都会做各种测试,你能保证你得电路板达到要求吗?当然,
- 小强350681 PCB设计
- 关于51单片机电子称的问题
- 各位高人该选那种型号的压力传感器啊,我要的称重范围是0到2000克或3000克的范围?望各位高人指导!希望是输出电压型的传感器,好直接用AD转换芯片!关于51单片机电子称的问题这个网上搜吧很多课设都有方案的是么?能否给出具体一点的东西
- wuxianwwwwww 嵌入式系统
设计资源 培训 开发板 精华推荐
- 桥式整流滤波电路
- AN155:基于 C8051F300 MCU 的步进电机控制参考设计
- 香橙派zero2拓展板+风扇
- 具有 LTC2208 16 位 130Msps、高速和高动态范围 ADC 的演示板
- EVAL-AD7274CB,用于 AD7274、12 位、3 MSPS ADC 的仪表评估板
- 具有 1Msps 18 位 LTC2378-18 SAR ADC、LTC6655-5 的 LTC6362 演示板
- NCV6324BGEVB:NCV6324B 评估板
- eval-adf4xxxz-usb,用于 SONET 的 PLL 时钟发生器的评估板
- 使用 ON Semiconductor 的 ADP3167 的参考设计
- 多路稳压电源