照搬原子哥的代码:http://www.openedv.com/posts/list/17347/htm
原子哥的教程有比较详细的注释和网友回复,这里仅作记录
这是基于IAR的,原子哥的帖子下面有网友回复的STVD的
main.c
#include "stm8l15x_conf.h"
volatile u8 fac_us=0;
void delay_init(u8 clk)
{
if(clk>16)fac_us=(16-4)/4;
else if(clk>4)fac_us=(clk-4)/4;
else fac_us=1;
}
void delay_us(u16 nus)
{
__asm(
"PUSH A n" //1T,压栈
"DELAY_XUS: n"
"LD A,fac_us n" //1T,fac_us加载到累加器A
"DELAY_US_1: n"
"NOP n" //1T,nop延时
"DEC A n" //1T,A--
"JRNE DELAY_US_1 n" //不等于0,则跳转(2T)到DELAY_US_1继续执行,若等于0,则不跳转(1T).
"NOP n" //1T,nop延时
"DECW X n" //1T,x--
"JRNE DELAY_XUS n" //不等于0,则跳转(2T)到DELAY_XUS继续执行,若等于0,则不跳转(1T).
"POP A n" //1T,出栈
);
}
void delay_ms(u32 nms)
{
u8 t;
if(nms>65)
{
t=nms/65;
while(t--)delay_us(65000);
nms=nms%65;
}
delay_us(nms*1000);
}
void Sysclk_Init(void)
{
//HSI内部时钟,0分频,16MHZ
CLK_HSICmd(ENABLE);
CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSI);
CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);
}
void main(void)
{
Sysclk_Init();
LED_Init();
//Uart1_Init();
delay_init(16); //参数16为内部时钟频率
while (1)
{
GPIO_ToggleBits(LED1_Port, LED1_Pin);
delay_ms(15);
}
}
注1:之前用定时器2延时,每1s串口打印信息一次,用 调试助手看的时间戳会差10ms左右,以为 是我写的定时器配置的有问题,用了上面的延时之后发现是一样的,不知道是不是执行一句printf();需要10ms。
注2:上面的延时不知道怎么用示波器测量,所以就测量了下 反转LED的频率,发现延时15ms的情况下,测量出来的一个周期是29.7ms,延时应该算是准确的吧。
上一篇:STM8时基单元
下一篇:STM8l051,新建工程
推荐阅读最新更新时间:2024-11-10 12:28
设计资源 培训 开发板 精华推荐
- LIS2DE12适配器板,标准DIL24插座
- 1810300422孙浩文
- Protues仿真实例(8051)-ULN2803.rar
- LTC3122 的典型应用 - 具有输出断开连接的 15V、2.5A 同步升压型 DC/DC 转换器
- LT3755IMSE-1 汽车降压-升压型 LED 驱动器的典型应用电路
- 使用 Analog Devices 的 LTC1740CG 的参考设计
- 使用 Analog Devices 的 LTP5902IPC-IPRB 的参考设计
- Thermal_sensor0.2
- 使用VIPer™Plus-VIPER06XS的12V、150mA非隔离降压转换器
- 计时,BBS 为 PCF2127AT TCXO 提供微控制器应用
- 下载Intel白皮书们,赢礼品获新知
- 【评论有礼!】Sleepace RestOn 智能睡眠监测仪拆解
- TI直播:精讲“双向CLLLC谐振、双有源电桥(DAB)参考设计”
- 了解 TE Connectivity 无创想,不奇迹 精彩专题,答题送好礼!
- 抢先体验!免费试用LM3S8962 评估套件!(10.13~11.30)
- 安世半导体新能源应用探索站,闯关赢好礼!
- 看MPLAB® Harmony集成软件框架之学习篇 你来评论我送礼!
- 调查:量身定制你的 M0 单片机!参与问卷有好礼!
- TE有奖直播:未来感知 由我先知-传感器在物联网中的最新应用
- 【EEWORLD第四十二届】2012年09月社区明星人物揭晓!