历史上的今天
返回首页

历史上的今天

今天是:2025年01月02日(星期四)

正在发生

2020年01月02日 | STM8学习笔记---点亮LED灯

2020-01-02 来源:eefocus

对单片机操作时一般有三个步骤,1.系统时钟选择。2.单片机外设初始化。3主程序编写。

同样要点亮LED灯时,也要按照这个步骤来。


首先选择系统时钟,打开STM8S中文参考手册,找到时钟寄存器

在这里插入图片描述

可以看到时钟寄存器有13个,那么该用哪个呢。STM8的主时钟源有4种,我们要用的是16M内部RC振荡器。

在这里插入图片描述

所以只需要设置主时钟切换寄存器CLK_SWR寄存器即可。

在这里插入图片描述

寄存器值为0XE1时,HSI为主时钟,所以将CLK_SWR值设置为0xE1。


CLK_SWR = 0xe1; //HSI为主时钟源 16MHz CPU时钟频率


然后设置时钟分频值

在这里插入图片描述

时钟分频寄存器默认值为0x18也就是8分频,我们希望单片机16M时钟运行,不分频。所以将分频寄存器的值设置为0。

CLK_CKDIVR = 0x00; //CPU时钟0分频,系统时钟0分频


为了方便以后程序调用,将系统时钟设置封装为一个函数


//系统时钟初始化

void SysClkInit( void )

{

    CLK_SWR = 0xe1;       //HSI为主时钟源  16MHz CPU时钟频率

    CLK_CKDIVR = 0x00;    //CPU时钟0分频,系统时钟0分频

}


系统时钟设置好之后,下来需要设置IO口。

在中文参考手册中找到GPIO相关寄存器。

在这里插入图片描述

LED控制是输出口,所以需要设置 输出数据寄存器、数据方向寄存器、控制寄存器。

首先设置选择端口的数据方向

在这里插入图片描述

LED在PB5口接,所以需要将PB5口设置为1

PB_DDR |= 1 << 5 ;

然后设置控制寄存器

在这里插入图片描述

通过PB5口输出高低电平来控制LED灯的亮灭,所以输出模式选择推挽输出。

PB_CR1 |= 1 << 5 ;

在这里插入图片描述

控制寄存器2在输出模式时可以设置输出速度,由于我们输出口接的是LED,所以输出速度对LED亮灭来说影响不大。这个寄存器我们也可以不设置使用默认值0就行。

在这里插入图片描述

输出数据寄存器,向这个寄存器中写1输出为高电平,向寄存器中写0,输出为低电平。

这样循环的给这个寄存器ODR5位置写0,写1时,PB口接的LED灯就亮、灭、亮、灭。循环。

到这里寄存器就设置完了,然后在主程序中循环改变PB_ODR寄存器中ODR的值就可以实现LED灯的闪烁了。

led.c中程序如下:


//LED端口初始化

void LED_GPIO_Init( void )

{

    PB_DDR |= ( 1 << 5 );        //PB5 输出 led

    PB_CR1 |= ( 1 << 5 );        //PB5 推挽输出

}


Main.c中程序如下:


#include "iostm8s003F3.h"

#include "led.h"


//系统时钟初始化

void SysClkInit( void )

{

    CLK_SWR = 0xe1;       //HSI为主时钟源  16MHz CPU时钟频率

    CLK_CKDIVR = 0x00;    //CPU时钟0分频,系统时钟0分频

}

//延时函数

void delay_ms( unsigned int ms )

{

    unsigned char i;

    while( ms != 0 )

    {

        for( i = 0; i < 250; i++ );

        for( i = 0; i < 75; i++ );

        ms--;

    }

}


void main(void)

{

    SysClkInit();

    LED_GPIO_Init();

    while(1)

    {

      PB_ODR |= ( 1 << 5 );

      delay_ms(500);

      PB_ODR &= ~( 1 << 5 );

      delay_ms(500);

    }

}


进入main函数后,首先进行时钟选择,然后对LED端口初始化,下来进入死循环中,循环改变LED口的值。这样LED灯就可以一亮已灭的闪烁了。


程序的功能是让LED灯闪烁,但是从代码中直接操作寄存器看起来不直观,可以使用宏定义,给寄存器重新取个直观的名字。

在led.h 头文件中添加宏定义

#define LED PB_ODR_ODR5

这样就把PB_ODR寄存器中的第5位ODR5 重命名为 LED,这样就对LED赋值时,就相当于对 PB_ODR_ODR5 进行赋值。于是程序中的循环可以改为


void main( void )

{

    SysClkInit();

    LED_GPIO_Init();

    while( 1 )

    {

        LED = 1;

        delay_ms( 500 );

        LED = 0;

        delay_ms( 500 );

    }

}


这样通过宏定义处理后,程序的可读性就提高了很多。

推荐阅读

史海拾趣

Abilis Systems公司的发展小趣事

Abilis Systems公司是一家专注于数字视频和数字广播领域的半导体公司,以下是该公司发展的五个相关故事:

  1. 公司成立和初期发展: Abilis Systems公司成立于2004年,总部位于法国索恩-卢瓦尔省的克勒拉克。公司成立之初,致力于研发数字视频和数字广播领域的创新技术,旨在提供先进的芯片解决方案。

  2. 技术创新和产品推出: 在成立后的几年里,Abilis Systems公司不断进行技术创新,并推出了一系列创新的数字视频和数字广播芯片产品。这些产品包括数字电视接收器和解调器、数字广播接收器等,为客户提供了高性能和高度集成的解决方案。

  3. 市场拓展和国际合作: 随着产品技术的不断成熟和市场需求的增长,Abilis Systems积极拓展国际市场,并与全球各地的客户建立了合作关系。公司的产品被广泛应用于数字电视、数字广播、卫星电视等领域,赢得了客户的信赖和认可。

  4. 并购和战略合作: 为了进一步加强技术实力和扩大市场份额,Abilis Systems公司进行了一系列并购和战略合作。通过收购具有相关技术和市场资源的企业,公司拓展了产品线,并加强了在数字视频和数字广播领域的领先地位。

  5. 未来展望和发展方向: Abilis Systems将继续致力于技术创新和产品升级,加强在数字视频和数字广播领域的研发投入。公司将不断推出符合市场需求的新产品和解决方案,为客户提供更优质的服务和支持。同时,公司还将积极参与行业标准制定和国际合作,推动数字视频和数字广播技术的发展和应用。

风华(FH)公司的发展小趣事

近年来,全球半导体行业面临严重的缺芯问题,给包括福斯特半导体在内的众多企业带来了巨大挑战。为了应对这一挑战,福斯特半导体积极调整策略,加强内部管理和优化生产结构。公司更新了一套全新的内部管理系统,对多个业务领域和管理板块进行配套和升级,提升了团队研发效率和质量。同时,公司还加强了移动化办公模式的更新升级,满足了灵活管理的需要。通过这些措施,福斯特半导体在保持高效运营的同时,也增强了自身的抗风险能力,为未来的发展奠定了坚实基础。

AXSEM公司的发展小趣事

福斯特半导体(这里假定为福斯特应用材料股份有限公司的半导体业务部门,因直接名为“福斯特半导体”的公司可能专注于不同领域)的母公司——杭州福斯特应用材料股份有限公司,最初并非涉足半导体行业。2003年,公司创始人林建华在纺织业取得成功后,决定跨界进军光伏胶膜行业。当时,国内光伏组件厂商所需的光伏胶膜主要依赖进口,市场被几家国际巨头垄断。林建华凭借在材料领域的深厚积累和技术优势,成功研制出EVA胶膜产品,并迅速占领市场。至2008年,福斯特已成为全球前三的EVA胶膜供应商,为光伏产业的发展奠定了坚实基础。这一跨界创新不仅推动了光伏胶膜行业的国产化进程,也为福斯特半导体后续在电子行业的拓展提供了宝贵的经验和资源。

Corsair Electrical Connectors Inc公司的发展小趣事

在国内市场取得一定成绩后,Corsair开始将目光投向了更广阔的国际市场。公司积极参加国际电子展会,与海外客户建立联系,拓展销售渠道。同时,Corsair还根据不同国家和地区的市场需求,调整产品策略,提供定制化的解决方案。这些努力使得Corsair的产品逐渐走进了国际市场,公司的影响力也不断扩大。

FCT electronic公司的发展小趣事

在环保和可持续发展成为全球共识的背景下,FCT electronic公司积极响应这一趋势,致力于推动绿色环保和可持续发展。公司采用了环保材料和工艺,减少了对环境的污染;同时,FCT electronic公司还加强了废物回收和资源利用方面的工作,实现了资源的循环利用和节约。这些努力不仅使FCT electronic公司在环保方面取得了显著成绩,也为公司的可持续发展奠定了坚实基础。

Hitron公司的发展小趣事

随着技术的不断成熟和市场需求的增长,FCT electronic公司开始寻求市场扩张和多元化发展。公司决定将产品线拓展至刚挠结合板和挠性加热器领域,以满足不同客户的需求。同时,FCT electronic公司还积极开拓国际市场,通过参加国际展览、与海外企业合作等方式,逐渐在全球电子行业中树立了品牌形象。

问答坊 | AI 解惑

求,,万年历不知那里程序写错了。。请大虾门帮手看看。。。

万年历不知那里错了,,写入1302里的程序,读出来数码管显示的不是数字,只有见到秒数那里在跳动,请大家帮手看看那里错了。。谢谢 SCLK EQU P3.2 IO EQU P3.3 RST EQU P3.4 YEAR DATA 66H ...…

查看全部问答>

从12864C-1读数据到单片机的问题,卡了很多天

恳求各位前辈帮忙 从12864读数据,用现有的子程序调试,若给某地址(如0x80)写数据,下面一句紧跟着读数据的话,可以读出刚写数据的ASCII码(我把读回的数据用P1口LED灯显示)。但如果是先在不同地址写出多个数据,再对某一地址进行读数据操作,结 ...…

查看全部问答>

关于s3c2440的裸机i2c驱动问题

最近小弟写了一个基于s3c2440的裸机i2c驱动可是怎么都不好使,调试时能写入但是不能读出为什么 编译环境keil uvion 4.01b 代码 这个是ii2.h #include \"S3C2440.h\" //引脚配置+电源配置+频率配置+iic配置 //函数iic写一个数据 iic读一个数据 ii ...…

查看全部问答>

求一CE5.0下有开发经验的师傅一名,帮助小弟开发一个简单程序.重分相谢....急

小弟碰一项目,用pda扫描rfid. 小弟有程序开发经验.脑袋还算灵活 现求一高人在开发中指点一二. 重分相谢 留下QQ联系方式..谢谢.. 急,很急…

查看全部问答>

TI---LM3S的图形驱动库和触摸之间的关系

有几个问题没懂:        1-TouchScreenCallbackSet(WidgetpointMessage);        2-WidgetMessageQueuePrecess(); 这个两句到底是传递的什么?       讨论下 ...…

查看全部问答>

STM32最便宜的型号是什么?

                                 STM32最便宜的型号是什么? …

查看全部问答>

刚答完题,总结下答题心得

replyreload += \',\' + 1325359;今天是端午节放假第一天,正好有时间,就把LaunchPaD的题答了。刚把三个级别的题都答完。答题过程连猜带查资料,选择题都对了。不知道那几个填空题怎么样。 幸好是不限时,不然好多题肯定就做不对了。通过答题,觉 ...…

查看全部问答>

有关boost电路的迷惑?

大家好,我最近在学习boost电路,我有点不太明白,就是电感的两个峰值电流I1和I2,他们的平均电流IL到底是和输入电流相等,还是和输出电流相等啊?有的资料上是和输入,有的是和输出,希望大家帮忙指教。谢谢了……! 还有一个问题就是boost电路的 ...…

查看全部问答>

请教STM32F103ZET FSMC 访问MT9076失败

E:/9076时序.jpg --------------FSMC 总线 存储器参数配置------------------------------*/           p.FSMC_AddressSetupTime =0x0F;           //地址建立时间  ...…

查看全部问答>