STM8L05X入门学习笔记
- 格式:docx
- 大小:1.60 MB
- 文档页数:16
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);