按以往的单片机开发流程,第一步先来点个灯。
基于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-17 01:20
推荐帖子
- MSP430FR25x2 电容式触摸感应混合信号微控制器
- MCU的主电源对DVCC和DVSS分别为数字模块和模拟模块供电。推荐的旁路电容和去耦电容分别为4.7F至10F和0.1F,精度为5%。VREG是CapTIvate稳压器的去耦电容。所需去耦电容的建议值为1F,最大等效串联电阻(ESR)200m。P1和P2特有引脚中断功能,可将MCU从所有低功耗模式(LPM)唤醒(包括LPM3.5和LPM4)。每个Timer_A3具有三个捕捉/比较寄存器。仅CCR1和CCR
- Jacktang 微控制器 MCU
- 问有关官方例程的问题
- 初级菜鸟一枚。。。救助各位大神,官方例程下载了该怎么学习和使用。。。求教具体步骤问有关官方例程的问题你看懂例程程序的意思,你就会用了……gh131413发表于2014-4-1109:10你看懂例程程序的意思,你就会用了…… 我是初级菜鸟,劳烦大侠。。。。头文件一般是兼容的吗?可以直接拿来用吗?
- 夏侯 微控制器 MCU
- STM32F407关于中断函数的问题
- 它的delay延时函数采用定时器延时,可是这个函数找不到SysTick_Config(168000);while(ntime);while过不去,它的库文件里也没有stm32f4xx.it.c,可是编译还不报错,这是怎么回事?该怎么办?STM32F407关于中断函数的问题看样子是原子F4的程序,你去看看他的寄存器的代码就知道为什么了~
- 电子-------- stm32/stm8
- 关于stm32F103ZET6的ADC
- 如题,请问STM32F103ZET6的ADC是什么型号的啊?我的课题需要做个fpga外围需要1M转换速率的12位并行ADC大家给个建议,给个型号我,谢谢了关于stm32F103ZET6的ADCSTM32F103ZET6的ADC是内置的,不明白你还问什么型号?恩,知道了,我想问一下,能推荐个1M转换速率的12位并行ADC给我吗,因为自己是菜鸟,会用开发板,却自己没有做过,这次要做FPGA需要外接ADC,告诉我下,谢谢有内置的ADC为什么
- fanfanworm stm32/stm8
- 设计
- 谁帮帮忙啊~~智能楼宇电梯呼叫系统设计(8路即可)~~~设计
- hnylydp 单片机
- 跪求看看这个简单APP inventor程序哪里出错了!!
- 我想写一个程序,用来计数按下按键的次数,当达到50次的时候关闭屏幕,可是程序并不像我想象的那样运行,于是我只好一步一步简化,结果简化成了这个样子,经测试,按下按键直接关闭屏幕,如果把0改成1,那么按下按键程序将无响应。求解,到底哪里出错了?跪求看看这个简单APPinventor程序哪里出错了!!这个是用什么语言写的呢,表示看不懂啊~这是用APPinventor写的,谷歌公司开发的图形化安卓编程kooking发表于2014-3-512:22这个是用什么语言写的呢,表
- lanka Linux与安卓
设计资源 培训 开发板 精华推荐
- 使用 ROHM Semiconductor 的 BD5239 的参考设计
- LTM4608AEV 2 并联 8A 输出排序 DC/DC 稳压器的典型应用电路
- LT4276AIUFD 25.5W(类型 2)PoE+ 电源在反激模式下的典型应用电路,具有 24V、1A 输出
- EVAL-AD7274CBZ,用于 AD7274、12 位、3 MSPS ADC 的仪表评估板
- LT8631HFE 12V、1A、降压转换器的典型应用电路
- LT3757,一个 4.5V、36V 至 5V、3A 的反相转换器
- TS472 超低噪声麦克风前置放大器的典型应用,具有 2.0V 偏置输出和主动低待机模式
- STK404-140 厚膜混合IC 单通道AB类音频功率放大器IC 120W典型应用
- bytePCL:ST8500电力线芯片的开发套件
- DCDC 7-24V转5V 3Amax 直流降压模块