历史上的今天
返回首页

历史上的今天

今天是:2024年09月14日(星期六)

正在发生

2020年09月14日 | stm8笔记1-搭建工程+孤独的小灯闪烁

2020-09-14 来源:eefocus

这里使用的单片机是stm8s105s6,IDE是使用的IAR for stm8;

1,首先说一下stm8的时钟:

 

每一款cup都需要时钟,才能跑起来,就像小车需要发动机一样。

stm8的时钟源有三个,分别是外部晶振/外部时钟,内部高速RC振荡器和内部低速RC振荡器。


1.1 外部晶振和外部时钟信号(HSE)的不同点是,外部晶振是通过晶体谐振器,两个负载电容和单片机内部的电路想配合而产生时钟信号;而外部时钟信号是一个质量好且稳定的信号直接为单片机提供时钟。


两种模式的连接示意图:

1.2 高速内部RC振荡器(HSI)

hsi信号由内部16MHZRC振荡器与一个可编程分频器(分频因子从1~8)产生。分频因子由寄存器CLK_CKDIVR设置决定。精度较低,但是稳定时间短。

注意,启动的时候,主时钟源默认为HSI RC时钟的8分频。


1.3 低速内部RC振荡器(LSI)

128khz的内部RC振荡器LSI产生的时钟是一个低功耗,低成本的可选主时钟源。


1.4 HSE设置为主时钟源

因为此时钟源精度较高,所以一般设置它为时钟源,但是单片机启动时默认为HSI的8分频作为时钟源,所以需要程序切换,这里介绍自动切换方法。


具体步骤:

a.设置切换控制寄存器(CLK_SWCR)中的位SWEN,使能切换机制。

b.向主时钟切换寄存器(CLK_SWR)写入时钟源,寄存器CLK_SWCR中的SWBSY被硬件置位,目标源振荡器启动,原时钟源依然被用于驱动内核和外设。一旦目标源稳定,寄存器CLK_SWR中的值将被复制到主时钟状态寄存器CLK_CMSR中去。此时SWBSY位被硬件清除,新时钟源替代旧时钟源。寄存器CLK_SWCR中的标志位swif被置位,如果SWIFN为1,则会产生一个中断。


2 IO口寄存器

每一个端口都有一个输出数据寄存器 (ODR),一个引脚输入寄存器 (IDR)和一个数据方向寄存器(DDR) ,控制寄存器1(CR1)和控制寄存器2(CR2)用于对输入/输出进行配置。任何一个I/O引脚可以通过对DDR,ODR,CR1和CR2寄存器的相应位进行编程来配置。

 

 

 

 

 

 

 

 

 

3 工程模板搭建

3.1 当你安装好 IAR,在 IAR 安装的目录下(stm8inc),你可以找到所有的stm8的头文件,根据自己的单片机信号选择,包括的main.c中就可以,stm8不像stm32一样,还需要添加驱动文件等,它反而和51有点像。


3.2 搭建工程

3.2.1 打开软件,file-new-workspace,新建工作空间。

3.2.2 project-create new project,新建一个空工程(emply project),保存(最好自己新建一个文件夹放这些东西,方便管理)。

3.2.3 save workspace,保存到工程文件夹下。

3.2.4 右键工程,添加一个group,名字自由定义,我是user。

3.2.5 新建一个main.c文件,这里面将是我们写代码的地方,保存到工程目录,然后在右键我们建立的组,添加刚刚新建的文件进来。


这里注意,如果我们添加进来的文件不在工程文件夹下,需要设置一下他们的路径,让编译器能找到他们。


【project-options-c/c++ compler-preprocessor-additional include directories:  

1、$PROJ_DIR$ :IAR工程目录。

2、"    " 代表根目录。

3、" . ." 表示返回上一级目录。

举例一下:$PROJ_DIR$..LibrariesSTM8S_StdPeriph_Driverinc


3.2.6 配置工程 project-options

选择单片机型号,在General Options --> Target --> Device下选择

在Debugger 下的 Setup 里的Driver 选择 ST-LINK

库配置 General Options- Library Configration:如果需要使用某些标准的库函数接口(如我们使用的printf and scanf),就需要选择Full


4 配上代码,孤独的小灯闪烁

#include "iostm8s105s6.h"


void delay(unsigned int t);


void main()

{

  if(CLK_CMSR!=0XB4)//判断当前时钟,如果不是HSE则自动切换成HSE

  {

    CLK_SWCR|=0X02;//SWEN置1,使能切换

    CLK_SWR=0XB4;//目标时钟源为HSE外部晶振

    while((CLK_SWCR&0X08)==0);//等待,直到切换成功,SWIF被置位

    CLK_SWCR=0;//清除标志位

  }

  PG_DDR=0X01;//配置PG0为输出

  PG_CR1=0X01;//配置PG0为推挽输出

  PG_CR2=0X00;//输出速率=2MHz

  while(1)

  {

    PG_ODR|=0X01;//小灯亮

    delay(50000);

    PG_ODR&=0XFE;//小灯灭

    delay(50000);

  }

}


void delay(unsigned int t)

{

  while(t--); 

}


推荐阅读

史海拾趣

博流(Bouffalo Lab)公司的发展小趣事

随着公司的发展壮大,博流积极寻求与全球知名企业的合作机会。其中,与谷歌的合作尤为引人注目。作为Google Matter EAP合作伙伴,博流与谷歌共同推动Matter协议在智能家居生态系统中的应用,为用户提供更加便捷、智能的家居体验。此外,博流还与多家产业链上下游企业建立了紧密的合作关系,共同推动物联网产业的发展。

COMPEX公司的发展小趣事

随着全球化趋势的加剧,COMPEX公司开始积极实施全球化战略。公司不仅在国内市场取得了良好的业绩,还积极开拓海外市场,与国际知名企业建立了广泛的合作关系。通过全球化战略的实施,COMPEX的产品逐渐走向世界,品牌影响力也得到了显著提升。

FutureWafer公司的发展小趣事

在电子行业竞争激烈的今天,COMPEX公司始终坚持质量至上的原则。公司建立了严格的质量管理体系,从原材料采购到产品生产、检验、出货等各个环节都严格把关,确保产品质量符合客户要求。这种对质量的执着追求,使得COMPEX的产品在市场上具有很高的口碑和竞争力。

Artaflex公司的发展小趣事

随着电子行业的快速发展,市场竞争日益激烈。为了保持领先地位,Artaflex公司积极寻求与其他企业的技术合作。通过与一家知名半导体公司的合作,双方共同研发了一款新型芯片,不仅提升了产品的性能,还降低了生产成本。这一合作不仅增强了Artaflex的技术实力,也为其打开了更广阔的市场空间。

ALCOA公司的发展小趣事

随着技术的不断进步和市场的扩大,ALCOA公司的业务逐渐扩展到铝土矿开采、氧化铝精炼和原铝生产等领域。这种垂直整合的模式使得公司能够更好地控制原材料的质量和供应,提高了生产效率,也降低了成本。到了20世纪中期,ALCOA已经成为全球最大的铝业公司之一,几乎垄断了全球的铝市场。

Global Power Technology Co., Ltd公司的发展小趣事
首先检查电源插头是否插紧,电源插座是否有电;若电源正常,可能是电路板故障,需联系专业维修人员检查并更换电路板。

问答坊 | AI 解惑

出路

做为技术人员,大家都觉得工资高,工作稳定,还能学到很多的东西。是大部份走出校门或性格内向,或希望过平静的人的必然选择。其实,你们有没有问过自己,这条路到底走对了吗?    一个刚毕业的大学生,从事销售和从事技术两种不同的工作,可能 ...…

查看全部问答>

FPGA的下载问题还没解决啊

fpga的下载问题 我目前在使用altera 的cyclone EP28 ,在程序下载的过程中出现一个奇怪的问题。 使用quartusII打开programmer,点击start按钮,出现以下错误: Error: Can\'t access JTAG chain Error: Operation failed 我用的是开发板啊!J ...…

查看全部问答>

可控硅控制

可控硅能够控制容性负载吗?怎么控制啊?阻性负载和感性负载都能够控制,就是控制不了容性负载啊!…

查看全部问答>

继续菜鸟问题。。Combo box 显示问题

case WM_CREATE:     CreateWindow(TEXT(\"Combo Box\"),TEXT(\"\"), WS_VSCROLL | WS_BORDER | WS_VISIBLE | WS_CHILD,                  100, 100, 205, 100, hWnd, (H ...…

查看全部问答>

evb RDA对象的pull方法使用出错

执行的代码如下: Dim strSQL As String dim strRemoteConnect as String strSQL = \"SELECT * from a\" strRemoteConnect=\"Provider=SQLOLEDB.1;data source=local;Initial Catalog=DBTest;user id=sa;password=sa\" Dim ceRDA As SSCE.Remo ...…

查看全部问答>

请教如何使点阵液晶显示图形?

我用的是320×240图形点阵液晶,现在可以在上面显示汉字了。 老板要求显示各种波形,请教高手那里可以找到这方面的资料,听说 要建立坐标系,还要研究各种图形的算法,有这么复杂吗?哪里能找 到这方面的资料? 谢谢您的关注!…

查看全部问答>

想学FPGA,求各位大师推荐一块学习板,谢谢!

我是一个学生,不要太贵的那种,差不多就行,谢谢!…

查看全部问答>

如何判断HR会录用你?

最近是找工作的高峰期,请参加过面试得朋友谈谈如何从等消息中判断自己是否有戏和谈谈自己的面霸经历为后面的应届生介绍些经验。人生最痛苦的莫过于什么也不知道就是等消息~~~~~~~~~~~~~~~~~…

查看全部问答>

电话线-偷电

       十一过完,学校就又开始讨厌的晚上11点断电了,没灯没充电器~~烦!!!        我左眼一瞄,电话线就这么断着的挂在那里,岂不是很危险,测测电压,我*!!!48V直流!!!顿时,一个邪恶的念头就 ...…

查看全部问答>