历史上的今天
返回首页

历史上的今天

今天是:2025年02月08日(星期六)

正在发生

2020年02月08日 | stm8——LED流水灯实现

2020-02-08 来源:eefocus

最近接触并学习了一款STM8系列的芯片。以前学习了的ARM9+Linux后,再来学习单片机就感到上手很快了。 

芯片基本信息:


Type:STM8L151G6

8-bit ultralow power MCU, 

up to 32 KB Flash, 

1 KB Data EEPROM 

RTC, 

LCD, 

timers, 

USART, 

I2C, 

SPI, 

ADC, 

DAC, 

comparators


具体可以查看datasheet:http://pdf-file.ic37.com/pdf4/STMICROELECTRONICS/STM8L_datasheet_892862/145357/STM8L_datasheet.pdf


现在来实现最简单的LED流水灯功能,在接触一块新的板子的时候,以LED入手,并快速熟悉整个的开发环境是比较合理的选择。


开发环境:IAR Embedded Workbench 

调试工具:ST Link


关于IAR的安装、ST Link驱动的安装以及环境参数的设置不再赘述,可自行参考网上资料。


=========================================== 

对于LED来说,它是输出设备,是由CPU的某个引脚来控制给高/低电平,从而使灯亮/灭的。具体的就要查看原理图,注意LED是给的上拉还是下拉即可。


对于这个项目来说,我们只需要到以下这些库: 

 

时钟、配置、GPIO。


接下来我们user只需要实现led.c和led.h两个文件即可: 

led.c:


#include "stm8l15x.h"

#include "led.h"


void LED_Init(void)

{

  GPIO_Init(GPIOB, (GPIO_Pin_1 | GPIO_Pin_2), GPIO_Mode_Out_PP_High_Fast);  //初始化引脚:1, 2 ; 输出模式:高速推挽高电平输出

}


void delay(unsigned int s)  //简单的延时,并不是很准确

{

  unsigned int i,j;

  for(i=s; i>0; i--)

    for(j=150; j>0; j--);

}


led.h:


#ifndef __LED_H

#define __LED_H


#include "stm8l15x_gpio.h"


void LED_Init(void);

void delay(unsigned int s);


#define ON  0

#define OFF 1


/*使用宏定义,使在主函数中更简洁.都是GPIO的使用*/

#define LED1(status) if(ON == status) GPIO_ResetBits(GPIOB, GPIO_Pin_1);

                     else GPIO_SetBits(GPIOB, GPIO_Pin_1);

#define LED2(status) if(ON == status) GPIO_ResetBits(GPIOB, GPIO_Pin_2);

                     else GPIO_SetBits(GPIOB, GPIO_Pin_2);


#endif


主函数main.c:


#include "stm8l15x.h"

#include "led.h"

int main( void )

{

  CLK_CCOConfig(CLK_CCOSource_HSI,CLK_CCODiv_1);  //配置时钟,HSI内部高速时钟 16M


  LED_Init();


  while(1)

  {

    LED1(ON);

    delay(500);

    LED1(OFF);


    LED2(ON);

    delay(500);

    LED2(OFF);

  }


}


compile后,make,再下载到板子上就行了.可以看到两个LED灯循环亮灭。 

这里不好的一点就是延时函数不能准确延时,只是用了简单的for循环。加以学习后使用精确延时再试试。

推荐阅读

史海拾趣

Alpha Industries公司的发展小趣事

在环保意识日益增强的今天,Alpha Industries积极响应绿色生产的号召。公司利用电子技术优化生产流程,减少能源消耗和废弃物排放。此外,Alpha Industries还推出了采用环保材料制成的军事服装系列,以实际行动践行绿色环保理念。这些举措不仅有助于提升公司的社会形象,也为公司的可持续发展奠定了坚实基础。

这些故事展示了Alpha Industries如何在电子技术的推动下,不断创新并适应市场变化,进而在相关领域取得显著发展。尽管这些故事并未直接涉及电子行业的核心业务,但它们却充分体现了Alpha Industries在技术创新和市场拓展方面的积极努力和取得的成果。

ATO SOLUTION公司的发展小趣事

随着全球环保意识的日益增强,ATO SOLUTION公司积极响应绿色环保号召,将环保理念融入企业发展和产品生产中。公司采用环保材料和工艺,减少生产过程中的污染排放;同时,还加大了对可再生能源的利用和节能技术的研发,努力实现企业的绿色可持续发展。这种环保实践不仅提升了公司的社会形象,也为公司的长期发展注入了新的动力。


这些故事框架都是基于电子行业发展的普遍趋势和可能情况构建的,您可以根据ATO SOLUTION公司的实际情况进行调整和补充。在撰写具体故事时,请确保内容的真实性和客观性,避免加入主观评价或猜测。

Aces Electronics Co Ltd公司的发展小趣事

随着技术的不断进步和产品的日益成熟,Aces开始将目光投向国际市场。公司积极参与国际电子展会和技术交流,与多家国际知名企业建立了合作关系。通过引进国外先进的技术和管理经验,Aces不断提升自身竞争力,逐渐在国际市场上占据了一席之地。同时,公司还积极拓展海外市场,将产品销往全球多个国家和地区。

明波通信(BWAVE)公司的发展小趣事

随着国内市场的日益饱和,明波通信开始将目光投向全球市场。公司先后在日本东京和江苏常州设立了子公司,通过技术合作和市场拓展,进一步巩固了公司在全球通信领域的地位。同时,明波通信也积极参与国际技术交流和合作,不断提升自身的技术水平和创新能力。这一系列的国际化战略举措,为明波通信的未来发展奠定了坚实的基础。

以上五个故事都是基于明波通信在电子行业中的发展历程和公开资料进行的概括性描述。虽然无法涵盖所有细节和具体事件,但希望能够展现出明波通信在创业、技术创新、市场拓展和国际化等方面的努力和成就。

Apx-Crystal公司的发展小趣事

面对日益激烈的市场竞争,Apx-Crystal公司意识到单凭自身的力量难以保持长期的竞争优势。于是,公司积极寻求与行业内外的合作伙伴进行技术交流和合作研发。通过与知名高校、科研机构以及同行的紧密合作,Apx-Crystal成功开发出了一系列具有创新性和领先性的电子产品,进一步巩固了其在行业内的领先地位。同时,公司还加大了对产业链的整合力度,推动了产业升级和可持续发展。

AMD(超微)公司的发展小趣事

随着全球化进程的加速推进,Apx-Crystal公司意识到拓展国际市场的重要性。公司制定了详细的国际化战略,通过参加国际展览、设立海外分支机构、与当地企业建立战略合作关系等方式,积极开拓海外市场。凭借优质的产品和服务,Apx-Crystal逐渐赢得了国际客户的信任和认可,产品远销欧美、亚太等多个地区,实现了从国内市场向国际市场的跨越式发展。

问答坊 | AI 解惑

比亚迪的铁电池到底行不行啊

老听比亚迪吹自己的铁电,前几天碰到一个要从比亚迪离职的工程师,说他们的电动汽车还是铅酸电池的,比亚迪的铁电到底行不行啊,巴菲特不会也被忽悠了吧。有知情的达人给解释下阿。…

查看全部问答>

ce5的流接口驱动问题

小弟做的驱动命名为TMRMON,编译也通过了,但是下到2440上运行却出现以下错误: TMRMON: DLL_PROCESS_ATTACH. Data Abort: Thread=83d71184 Proc=82026360 \'device.exe\' AKY=00000005 PC=01df185c(tmrmon.dll+0x0000185c) RA=01df184c(tmrmon ...…

查看全部问答>

做过SD卡的进来一起探讨一下SD卡读卡速度的问题

小弟最近在S3C2410+linux2.6.13的环境下,移植成功了SD卡驱动,可以成功挂载SD卡,但是向SD卡中读-写-比较数据速度比较慢,SD卡的控制模式采用SD模式,是直接占用CPU去读写数据,我预计改为由DMA去传输数据,速度会快些,不知这样的思路可否正确 ...…

查看全部问答>

CeFindAllFile问题

我在做Wince设备中某目录下的文件复制到PC时,用CeFindAllFiles函数返回为true, 但不能返回所有的文件名,有没有谁弄过的?能不能写一下CeFindAllFiles 的用法? 最好给个例子. …

查看全部问答>

Screen.PrimaryScreen.WorkingArea獲取不到工作區域

如題,獲取的是設備屏幕的高和寬,包括了工作欄, WorkingArea獲取的是工作區域,不是不包括工作欄嗎?…

查看全部问答>

请问如何控制CommandBar上的OK键和Help键的使能?

const DWORD dwAdornmentFlags = CMDBAR_HELP | CMDBAR_OK; m_wndCommandBar.AddAdornments(dwAdornmentFlags); 以上代码VS2005下SDI程序缺省Cancel和Help打灰,Dialog程序却缺省全部可用, 有人遇到这种情况吗?…

查看全部问答>

电表无线集抄系统

申请eZ430-RF2500开发套件…

查看全部问答>

DDS芯片怎样产生任意波形?

本帖最后由 paulhyde 于 2014-9-15 03:47 编辑 最近在做波形产生这一块,用到了DDS芯片,不太明白DDS到底怎么用,内部ROM只有正弦函数的数据表,但我们要求产生任意波形,DDS内部波形ROM 不能修改吧,求用过的高手给点意见,谢了!  …

查看全部问答>

我的fpga资料

fpga的视频学习…

查看全部问答>