首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

STM8时钟切换(支持HSI/HSE切换)+EEPROM操作支持(就像定义变量一样)(转子原子))

STM8时钟切换(支持HSI/HSE切换)+EEPROM操作支持(就像定义变量一样)(转子原子))

还是参考战舰板的sys.c和sys.h,实现了STM8的sys.c和sys.h,本代码实现功能:
1,支持STM8的时钟设置,包括HSI/HSE,以及分频等.
2,支持IAR自带的__eeprom关键字,直接像使用内存一样使用eeprom.
比如:
__eeprom __no_init u8 test_eeprom;
//定义一个eeprom测试数据
就定义了一个数据 test_eeprom,存放在eeprom里面,操作 test_eeprom这个eeprom数据就和操作内存一样.
3,支持中断优先级设置.三个等级.
4,支持外部中断触发设置.
5,支持选项字编程,这个时钟设置的时候需要用到,所以顺带放在sys.c里面了.


以下为代码,未经过完整的测试,在STM8S208上面实现的,其他型号暂时还没测试,如有问题,请大家反馈.
sys.h代码如下:
#ifndef  __SYS_H
#define  __SYS_H
#include "stm8s.h"
//stm8系列共用头文件.
#include "stdbool.h"   
//BOOL 类型头文件
#include "intrinsics.h"
//总中断头文件
////////////////////////////////////////////////////////////////////////////////

//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK
//系统相关代码
   
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2013/6/27
//版本:V1.1
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2009-2019
//All rights reserved
//******************************************************************************
//V1.0 20130625
//支持选项字编程
//支持IAR EEPROM变量定义操作
//支持系统时钟初始化设置,包括HSE/HSI设置以及分频设置
//V1.1 20130627
//增加中断管理函数ITC_Set和EXTI_Config
////////////////////////////////////////////////////////////////////////////////

//用户配置区

//如果使用了外部晶振,且频率大于16Mhz,请定义这里为1,否则定义为0即可
#define STM8_HSE_B16M
0X01



////////////////////////////////////////////////////////////////////////////////
//常用数据类型定义
#define u8  uint8_t
#define u16 uint16_t
#define u32 uint32_t
//STM8S中断总开关,在使用中断的时候,记得先开启总开关
#define INT_ENABLE()
__enable_interrupt()
//开启所有中断
#define INT_DISABLE()   __disable_interrupt()
//关闭所有中断
////////////////////////////////////////////////////////////////////////////////
//FLASH操作部分宏定义
#define FLASH_UNLOCK_KEY1
0x56  //第一个密钥
#define FLASH_UNLOCK_KEY2
0xAE  //第二个密钥

#define OPT_ROP_ADDR
(u16)0X4800
#define OPT_UBC_ADDR
(u16)0X4801
#define OPT_AFR_ADDR
(u16)0X4803
#define OPT_WDG_ADDR
(u16)0X4805
#define OPT_CLK_ADDR
(u16)0X4807
#define OPT_HSESTARTUP_ADDR
(u16)0X4809
#define OPT_FLASHWAIT_ADDR
(u16)0X480D
#define OPT_BOOTLOADER_ADDR (u16)0X487E
////////////////////////////////////////////////////////////////////////////////
//中断向量号集
#define TLI_VECTOR
0
#define AWU_VECTOR
1
#define CLK_VECTOR
2
#define EXTI_PA_VECTOR
3
#define EXTI_PB_VECTOR
4
#define EXTI_PC_VECTOR
5
#define EXTI_PD_VECTOR
6
#define EXTI_PE_VECTOR
7
#define CAN_RX_VECTOR
8
#define CAN_TX_VECTOR
9
#define SPI_VECTOR
10
#define TIM1_UPD_OVF_VECTOR
11
#define TIM1_CAP_COM_VECTOR
12
#define TIM2_UPD_OVF_VECTOR
13
#define TIM2_CAP_COM_VECTOR
14
#define TIM3_UPD_OVF_VECTOR
15
#define TIM3_CAP_COM_VECTOR
16
#define UART1_TX_VECTOR
17
#define UART1_RX_VECTOR
18
#define I2C_VECTOR
19
#define UART23_TX_VECTOR
20
#define UART23_RX_VECTOR
21
#define ADC_VECTOR
22
#define TIM4_UPD_OVF_VECTOR
23
#define FLASH_VECTOR
24
//EXTI_Config函数,GPIO定义(包括TLI)
#define GPIO_A
0
#define GPIO_B
1
#define GPIO_C
2
#define GPIO_D
3
#define GPIO_E
4
#define GPIO_TLI
5
//TLI中断
//EXTI_Config函数,触发方式定义(TLI仅支持上升沿/下降沿触发)
#define FLTIR   
0  
//下降沿和低电平触发
#define RTIR   
1
//仅上升沿触发
#define FTIR   
2  
//仅下降沿触发
#define RFTIR

3  
//上升沿和下降沿触发
////////////////////////////////////////////////////////////////////////////////

void STMFLASH_Unlock(u8 type);
void STMFLASH_Lock(u8 type);
u8 STMFLASH_WaitForLastOperation(u8 type);
void STMFLASH_EraseOptionByte(u16 addr);
void STMFLASH_ProgramOptionByte(u16 addr,u8 data);
u16 STMFLASH_ReadOptionByte(u16 addr);
void ITC_Set(u8 vector,u8 priority);
void EXTI_Config(u8 GPIOx,u8 TRIM);
u8 System_Clk_AutoSwitch(u8 newsrc);
void System_Clk_DivSet(u8 div);
void stm8_clock_init(u8 clksrc,u8 div);

#endif
继承事业,薪火相传
返回列表