STM8L05X入门学习笔记

  • 格式:docx
  • 大小:1.60 MB
  • 文档页数:16

下载文档原格式

  / 24
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、工程新建

首先新建文件夹,在文件夹下建立四个文件(这个看个人喜好),我喜欢建立一个工程文件夹Project用于存放工程文件,Library文件用于存放库文件,App用于存放用户程序,Doc 用于存放说明文档,如图1所示。

图1

二:将官方的库文件Libraries文件下STM8S_StdPeriph_Driver这个文件下的内容复制到自己新建的Library文件下,把官方Project文件下Template文件夹下main.c stm8s_conf.h stm8s_it.c 和stm8s_it.h复制到App文件夹下。如图2,图3。

图2

图3

三:打开IAR 选择Project-> Create New Project –>ok,将文件保存到Project下,

这时工程已经建好,右击工程选择Add Group,然后依次添加文件App,Libraries,Doc,BSP_CFG

配置好如图所示

四:给工程下APP添加App文件下的文件如图

给Libraries添加Library文件下src文件下的所有文件、

五配置Options,包括如下,1选择型号这里选STM8S903K3

2C++选项卡配置路经,和型号的宏定义。

六编译工程,这事会提醒对工程的保存,进行保存即可,这时会发现很多错误,这是因为这个库包含了所有的型号,有些这个单片机没有,将它移除即可。再次编译就会发现没有错误了。

7HEX文件输出

2、系统时钟

四种不同的时钟源可以用来驱动系统时钟:

●16 MHz 高速内部(HSI)工厂调整RC 时钟

●1 到16 MHz 高速外(HSE)振荡器时钟

●32.768 千赫低速外(LSE)振荡器时钟

●38 千赫低速内部(LSI)低功耗时钟

每个时钟源可以开启或关闭独立不使用时的功耗,优化。

这四个时钟可以用一个可编程分频器(因素1 至128)驱动

系统时钟(系统时钟)。该系统时钟用于时钟的核心,内存和外设。复位后,该设备重新启动与HSI 时钟除以8 的违约。该分频器分频比时钟源可以改变应用程序尽快执行代码起点。

static void CLK_Config(void)

{

/* Select HSE as system clock source */

CLK_SYSCLKSourceSwitchCmd(ENABLE);

CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSE);

/* system clock prescaler: 1*/

CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);

while (CLK_GetSYSCLKSource() != CLK_SYSCLKSource_HSE)

{}

}

static void RTC_Config(void)

{

/* Enable RTC clock */

CLK_RTCClockConfig(CLK_RTCCLKSource_LSE, CLK_RTCCLKDiv_1);

/* Wait for LSE clock to be ready */

while (CLK_GetFlagStatus(CLK_FLAG_LSERDY) == RESET);

/* wait for 1 second for the LSE Stabilisation */

LSE_StabTime();

CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);

/* Configures the RTC wakeup timer_step = RTCCLK/16 = LSE/16 = 488.28125 us */ RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16);

/* Enable wake up unit Interrupt */

RTC_ITConfig(RTC_IT_WUT, ENABLE);

/* Enable general Interrupt*/

enableInterrupts();

}

/* RTC wake-up event every 500 ms (timer_step x (1023 + 1) )*/

RTC_SetWakeUpCounter(1023);

RTC_WakeUpCmd(ENABLE);

3、看门狗

void IWDG_Config(void)

{

/* Enable IWDG (the LSI oscillator will be enabled by hardware) */

IWDG_Enable();

/* IWDG timeout equal to 214 ms (the timeout may varies due to LSI frequency dispersion) */

/* Enable write access to IWDG_PR and IWDG_RLR registers */

IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

/* IWDG configuration: IWDG is clocked by LSI = 38KHz */

IWDG_SetPrescaler(IWDG_Prescaler_32);

/* IWDG timeout equal to 214.7 ms (the timeout may varies due to LSI frequency dispersion) */

/* IWDG timeout = (RELOAD_VALUE + 1) * Prescaler / LSI

= (254 + 1) * 32 / 38 000

= 214.7 ms */

IWDG_SetReload((uint8_t)RELOAD_VALUE);

/* Reload IWDG counter */

IWDG_ReloadCounter();

}

/* Reload IWDG counter */

IWDG_ReloadCounter();

4、Eeprom

__no_init __eeprom unsigned char num @0x1001;

FLASH_Unlock(FLASH_MemType_Data);

FLASH_ProgramByte(0x1001, temp1);//eeprom memory: address is 0x1001 =temp1

FLASH_WaitForLastOperation(FLASH_MemType_Data);