日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM8,延时函数

發布時間:2025/4/16 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM8,延时函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

照搬原子哥的代碼: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,延時應該算是準確的吧。

?

轉載于:https://www.cnblogs.com/fly2199/p/7569396.html

總結

以上是生活随笔為你收集整理的STM8,延时函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。