STM8L151C8学习笔记1:LED驱动

发布者:size0109最新更新时间:2022-01-30 来源: eefocus关键字:LED驱动  时钟 手机看文章 扫描二维码
随时随地手机看文章

按以往的单片机开发流程,第一步先来点个灯。


基于STM8与STM32同属STM系列,要想点亮一个灯,所需步骤不过就三步:

开启相应时钟


初始化GPIO模式


拉高/置低来点亮LED


硬件电路

主控部分:

STM8主控

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函数的时钟就好了。

关键字:LED驱动  时钟 引用地址:STM8L151C8学习笔记1:LED驱动

上一篇:STM8S003 上升沿进不去外部中断问题
下一篇:单片机C语言程序与数据存储

推荐阅读最新更新时间:2024-11-17 01:20

一种滞环控制的LED驱动设计
LED 的发光效率目前已经达到并且正在超过荧光灯.HID 灯等传统光源的水平,在通用照明领域将逐渐成为主流光源.由于LED 照明光源具有高光效.长寿命.节能环保,耐用等优点,近年来LED 应用以及驱动已经成为研究热点.在相同工作电压下,LED的正向导通压降因受工艺离散性的影响而呈现出一定的差异,所以恒流驱动是白光LED 的最佳选择.目前的电流控制方式主要有峰值电流控制,滞环控制,平均电流控制,和固定导通时间控制(COT)等控制方法.主流的峰值电流控制存在平均电流和峰值电流不一致的问题;且当电路占空比大于0.5时,有次谐波震荡现象,需要增加斜坡补偿电路,因此增加了电路复杂性.平均电流模式能精确控制平均电流,但是控制方法实现复杂,且仍
[电源管理]
一种滞环控制的<font color='red'>LED驱动</font>设计
LPC17xx使用内部晶体(Internal RC Oscillator)作为时钟
在一般应用场合(不使用USB,对精度要求不高)LPC17xx系列除了使用外部晶体外,还可以使用内部的12MHZ晶体作为振荡源。其实在运行初始化程序,进入用户程序前(main函数),LPC17xx是使用了内部晶体,这样设计是为了让引导代码(俗称bootloader)运行在一个已知的频率上。 最近在开发板上做了个使用内部晶体的小实验,把原来使用外部12MHZ的程序修改成了使用内部晶体。这个修改其实很简单,只要修改时钟源选择寄存器(CLKSRCSEL)和锁相环0配置寄存器(PLL0CFG)。在Keil下system_LPC177x_8x.c下甚至能可视化修改。具体如下图: 为了确定实验效果,把外部晶体使能关闭了(Main
[单片机]
LPC17xx使用内部晶体(Internal RC Oscillator)作为<font color='red'>时钟</font>源
解析如何为白光LED驱动选择最好的拓扑
  白炽灯时代即将和我们告别了。整个20世纪,爱迪生发明的白炽灯经受住了时间的考验,成为标准的通用照明工具。但新的照明技术-尤其是发光二极管( LED )-必将最终代替白炽灯和荧光灯。   当整个世界都在因为日益上升的能源成本而节省能源预算时,白炽灯照明技术显然站在了错误的一边。一个白炽灯消耗的能源中有97%被浪费。荧光灯虽然稍好一些,但仍然浪费了85%的能量。而且,这两种灯的平均使用寿命都只有大约5000个小时。另外,荧光灯还使用了有毒的汞,发出的光更是颜色粗糙。这两种技术都无法和 白光LED 相比-它不仅使用寿命是前者的10倍,也不使用有毒物质,而且几乎能发出任何颜色的光。更重要的是,它的光转换效率绝不亚于荧光灯。
[电源管理]
解析如何为白光<font color='red'>LED驱动</font>选择最好的拓扑
IEEE1588在分散运动控制系统中的应用
引言   本文说明IEEE1588在一个分散运动控制系统中的应用,目前的解决方案依靠分散运动部件对时间同步的专门实现。随着IEEE1588的出现,可以开发一种在标准网络(如以太网)上使用商用技术的运动控制解决方案。本文要说明在一个网络范例内IEEE1588和运动的基本操作。   分散运动控制要求系统节点之间紧密地同步,通常这要求在系统内时钟间的波动是微秒数量级。更高性能的应用驱动将这个性能提高到几分一微秒范围。当前的解决方案是使用适当的网络和接口部件达到使分散系统内节点间的紧密同步。定制的接口卡控制整个系统时钟的分配和同步以及控制数据的定时传送。   IEEE1588精确时间协议提供分布网络上的标准化的同步机制,通过使用IEE
[工业控制]
s3c6410时钟体系
S3C6410可以使用外部晶振( XXTIpll )(默认为12MHZ)和外部时钟( XEXTCLK )两种方式输入时钟信号。它由跳线OM 决定。S3C6410 默认的工作主频为12MHz(晶振频率),S3C6410有三个PLL,分别为APLL、MPLL和EPLL。其中APLL产生ACLK,给arm core使用。MPLL产生HCLK和PCLK。EPLL产生特殊的时钟,比如为USB提供48MHz时钟。 时钟初始化流程: 当锁相环配置好了后,处理器会进入lock time。这段时间是不工作的,之后会根据配置的进行工作。 根据上图,可以进行软件的设置,如下图: 一.设置lock time时,一般不去设置,使用默认值
[单片机]
s3c6410<font color='red'>时钟</font>体系
基于LNK302/LNK304-306离线转换器的非隔离电源及恒流LED驱动
         引言         美国Power Integrations(PI)公司自上个世纪90年代开始,不断推出PWM控制器与功率MOSFET“二合一”系列IC,为设计输出功率直达200W的高效紧凑型低成本开关电源、AC适配器和电池充电器等,提供了一种新的解决方案。         PI公司不久前推出的LNK302/LNK304-306四种Link Switch-TN系列离线(off-line)转换器IC,是为替代360mA以下的所有线性和电容降压器(Cap dropper)型非隔离电源而专门设计的。Link Switch-TV系列IC除了用于仪器和工业控制非隔离开关型电源外,用于其设计非隔离恒流LED驱动器更是比较
[电源管理]
基于LNK302/LNK304-306离线转换器的非隔离电源及恒流<font color='red'>LED驱动</font>器
如何修改STM32系统时钟
一般的STM32控制板搭载的是8M晶振。我们也熟悉了8M晶振的使用方法。但是,当遇到12M晶振是如何修改STM32系统时钟呢? 具体步骤如下: 第一步,全局搜索HSE_VALUE #define HSE_VALUE ((uint32_t)8000000) /*! Value of the External oscillator in Hz */ 修改为: #define HSE_VALUE ((uint32_t)12000000) /*! Value of the External oscillator in Hz */ 第二步,打开system_stm32f10x.c,修改PLL参数,将 /* PLL
[单片机]
USB2.0摄像头微处理器硬件设计
1.引言 USB2.0摄像头微处理器支持高速USB2.0接口,内嵌强劲的图像后处理单元,JPEG高速编译码器,支持高达200万像素的CMOS传感器接口和CCD传感器接口,处理器设计的产品可以实现独特的运动监测功能与脸部追踪功能,这不仅大大加强了显示效果,提高了画面的品质,更拓展了PC摄像头的应用领域,如增强的实时视频聊天功能和门禁监测系统。 主要功能:USB2.0高速传输并兼容USB1.1;高速图像后处理单元;JPEG高速编译码器;VGA下30帧/秒高速传输;CMOS/CCD接口;内置8比特微控制器。 不仪具备以上的先进特性,还拥有以下多种可扩展性:多个GPIO接口为增加连拍、LED指示灯、快捷键等功能提供了无限可能;USB
[手机便携]

推荐帖子

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与安卓
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved