stm8笔记1-搭建工程+孤独的小灯闪烁

发布者:TranquilMind最新更新时间:2020-09-14 来源: eefocus关键字:stm8  搭建工程  小灯闪烁 手机看文章 扫描二维码
随时随地手机看文章

这里使用的单片机是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--); 

}


关键字:stm8  搭建工程  小灯闪烁 引用地址:stm8笔记1-搭建工程+孤独的小灯闪烁

上一篇:STM8系列单片机开发环境搭建
下一篇:STM8--UART2

推荐阅读最新更新时间:2024-10-31 07:31

STM8定时器初始化和GPIO初始化顺序导致GPIO动作不正确
现象 用定时器TIM4定时翻转GPIO用低电平灌电流驱动LED闪烁的简单测试程序不能正常执行。LED灯不闪烁,debug查看GPIO口却是正确的被翻转了。测试IO口电压不对。 问题代码 void main(void) { // 系统时钟不分频(内部16MHz) CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); // TIM4进行128分频,同时设置溢出上限值保证1ms一次中断 TIM4_TimeBaseInit(TIM4_PRESCALER_128, 124); // 开TIM4更新事件中断 TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
[单片机]
ST公司的STM8AF5286主要特性及框图
ST公司的STM8AF5286是用于汽车的8位MCU,配置了多达128KB闪存,数据EEPROM,10位ADC,计时器,LIN,CAN,USART,SPI,I2C等接口,工作电压3-5.5V, STM8 CPU内核采用哈佛架构和三级流水线,工作频率高达24MHz,采用STM8A-DISCOVERY套件评估.本文介绍了STM8AF5286主要特性,框图,以及STM8A-DISCOVERY Discovery开发板主要特性,STM8AF板和STM8AL板硬件框图,电路图和材料清单. The STM8AF526x/8x/Ax and STM8AF6269/8x/Ax automoTIve 8-bit microcontrollersde
[汽车电子]
STM32 STM8开发工具(ST-LINK/V2)
简介: 这是一款完全兼容ST-LINK/V2的STM32 STM8开发工具,可以在线仿真、调试、下载全系列的STM8和STM32 MCU。并且拥有固件升级的功能,可支持ST公司未来的MCU开发。 本产品采用与官方版本完全一致的固件,所以完全兼容官方的ST-LINK/V2,具有相同的功能及使用方法。 并且,产品设计团队还对官方版本的硬件作了反复摸索、不断优化,使之既继承了官方版本优点,又对官方版本进行了超越;让用户使用起来更安全、更方便、更快捷、更高效! 创新的功能特点: 重新设计了电路架构及外壳,使工具更小巧、漂亮、易带,使用更安全、方便; 精心设计了内部电路,增加了多重保护措施,确保用户电脑、ST-
[单片机]
IAR 常用快捷键
STM8的主要开发环境是IAR,这里记录一下IAR的常用快捷键: IAR全局查找的快捷键是【Ctrl + Shift + F】,弹出界面如下: IAR查找选项 1、如果只勾选【Match case】,搜索关键字必须输入 Digit_Count 才能找到 Digit_Count 。 2、如果只勾选【Match whole word】,搜索关键字只要输入 digit_count ,就能找到 digit_count 的字符串,不管它里面的大小写情况。 3、如果只勾选【Match regular expression】,搜索关键字只要输入 digit_count ,就能找到包含 digit_count 的字符串,不管
[单片机]
IAR 常用快捷键
STM8单片机中自己实现 printf()函数功能
  由于STM8单片机本身内存比较小,而系统自带的printf()函数又比较占据空间,所以在稍微大一点的工程中有时候一使用 printf() 函数就会导致单片机内存不足,于是想着能不能自己写一个比较小的函数来实现类似printf()函数的功能。经过网上查找资料和总结终于找到了一个占用内存比较小,又能实现串口打印功能的方法。   现在将自己的方法分享出来,这里使用 STM8S003F3P6单片机测试。   首先新建一个工程,专门用来测试串口功能。   串口部分相关代码如下: //串口 void Uart1_IO_Init( void ) { PD_DDR |= ( 1 5 ); //输出模式
[单片机]
在<font color='red'>STM8</font>单片机中自己实现 printf()函数功能
stm8 stm8s stm8af 485接口 modbus协议代码
本人使用stm8af62a6,stm8s和stm8af大多数是互通的,只用一个库函数 62a6只能使用uart3! 485接口是硬件,不需要管,任何硬件接线都可以实现 代码见附件,已实现通信 主函数代码,主要为初始化函数,以及modbus帧接收处理函数,帧接收处理按自己的需求自行修改,本例的处理函数为接收数据再多输出一点数据 单片机源程序如下: /****************************************************************** mian.c文件部分 **********************************************************
[单片机]
STM8 时钟修改
系统功能 对STM8的时钟修改,并用LED进行显示,观察LED的闪烁速度是否有变化。    硬件设计 LED控制电路原理图 软件设计 /********************************************************************* 微 雪 电 子 WaveShare http://www.waveShare.net 目标系统: 基于STM8单片机 应用软件: Cosmic CxSTM8 说 明: 若用于商业用途,请保留此段文字或注明代码来源 深 圳 市 微 雪 电 子 有 限 公 司 保 留 所 有 的 版 权 *******************************
[单片机]
<font color='red'>STM8</font> 时钟修改
STM8 自动唤醒AWU
简介 AWU是用来当MCU进入低功耗的活跃停机(Active Halt) 模式时提供一个内部的唤醒时间基准。该时间基准的时钟是由内部的低速RC振荡器时钟(LSI)或者通过预分频的HSE晶振时钟来提供的。 LSI 时钟测量 在使用LSI低速内部时钟时,为了确保最好的精度,它的频率可以通过TIM3的输入捕捉1 来测定。 AWU 时钟框图 AWU功能描述 AWU 操作 为了使用AWU功能,按顺序执行如下步骤: 1. 使用AWU_CSR寄存器的MSR位和TIM3的输入捕捉通道1来检测LS的时钟频率; 2. 通过写AWU_APR 的APR 位来定义适当的预分频值; 3. 通过写AWU_TBR 的AWUTB 来
[单片机]
<font color='red'>STM8</font> 自动唤醒AWU
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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