這里主要是使用Systick 時(shí)鐘來實(shí)現(xiàn)精準(zhǔn)延遲,它本質(zhì)也是一個定時(shí)器,使用時(shí)只需復(fù)制粘貼使用,這里是使用72M的STM32F103ZET6,不同型號需要自行修改對應(yīng)參數(shù)。
#include "stm32f10x.h"
static uint8_t D_us=0; //微妙系數(shù)
static uint16_t D_ms=0; //毫秒系數(shù)
void Delay_Init(void)
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
D_us = SystemCoreClock/8000000;
D_ms = (uint16_t)D_us * 1000;
}
void Delay_us(uint32_t nus)
{
uint32_t temp;
SysTick->CTRL = 0x00; //關(guān)閉SysTick定時(shí)器
SysTick->LOAD = nus*D_us; //延時(shí)重裝載值
SysTick->VAL = 0x00; //清空計(jì)數(shù)器
SysTick->CTRL|= 0x01 ; //啟動SysTick定時(shí)器
do
{
temp=SysTick->CTRL;
}while((temp&0x01)&&!(temp&(1<<16))); //等待延時(shí)結(jié)束
SysTick->CTRL = 0x00; //關(guān)閉SysTick定時(shí)器
SysTick->VAL = 0X00; //清空計(jì)數(shù)器
}
void Delay_ms(uint32_t nms)
{
uint32_t temp;
SysTick->CTRL = 0x00; //關(guān)閉SysTick定時(shí)器
SysTick->LOAD = nms*D_ms; //延時(shí)重裝載值
SysTick->VAL = 0x00; //清空計(jì)數(shù)器
SysTick->CTRL|= 0x01 ; //啟動SysTick定時(shí)器
do
{
temp=SysTick->CTRL;
}while((temp&0x01)&&!(temp&(1<<16))); //等待延時(shí)結(jié)束
SysTick->CTRL = 0x00; //關(guān)閉SysTick定時(shí)器
SysTick->VAL = 0X00; //清空計(jì)數(shù)器
}
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定義結(jié)構(gòu)體變量
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//開啟時(shí)鐘
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0; //選擇你要設(shè)置的IO口
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //設(shè)置推挽輸出模式
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //設(shè)置傳輸速率
GPIO_Init(GPIOC,&GPIO_InitStructure); //初始化GPIO
GPIO_SetBits(GPIOC,GPIO_Pin_0); //將LED端口拉高,熄滅所有LED
}
int main( void )
{
Delay_Init();
LED_Init();
while(1)
{
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
Delay_ms(500);
GPIO_SetBits(GPIOC,GPIO_Pin_0);
Delay_ms(500);
}
}
--END--
收錄于合集 **#**STM32
14個
上一篇STM32|外部中斷下一篇STM32|通用定時(shí)器
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報(bào)投訴
-
定時(shí)器
+關(guān)注
關(guān)注
23文章
3255瀏覽量
115369 -
Systick
+關(guān)注
關(guān)注
0文章
62瀏覽量
13149 -
STM32F103ZET6
+關(guān)注
關(guān)注
9文章
67瀏覽量
21201
發(fā)布評論請先 登錄
相關(guān)推薦
請問STM32G071如何通過DWT實(shí)現(xiàn)us精準(zhǔn)定時(shí)?
STM32G071怎樣通過DWT實(shí)現(xiàn)us精準(zhǔn)定時(shí)?,各位大佬有實(shí)現(xiàn)的嗎?
發(fā)表于 03-20 06:59
如何實(shí)現(xiàn)PTP協(xié)議的精準(zhǔn)同步時(shí)鐘?
尊敬的技術(shù)大牛們,你們好!
現(xiàn)有一項(xiàng)目需要用到貴公司的STM32F4系列產(chǎn)品,由于業(yè)務(wù)場景對時(shí)鐘同步精度要求很高。所以需尋求你們的技術(shù)支撐,提供關(guān)于STM32F4系列的PTP協(xié)議或IEEE1588協(xié)議的參考代碼!以便實(shí)現(xiàn)PTP的時(shí)間精準(zhǔn)
發(fā)表于 03-26 07:57
請問STM32 USB通信延遲有多大?
STM32作為從機(jī),接收來自PC的實(shí)時(shí)IO信號,大約每秒100次,那每次信號只有20ms的間隔我用串口做,主機(jī)發(fā)送到從機(jī)接收到,延遲很不穩(wěn)定,大約從10ms-40ms,從機(jī)執(zhí)行的IO信號的時(shí)候很不均勻。。
不知道USB通信能做到多低的延
發(fā)表于 04-18 08:26
TMS570是否有延遲指令
Hello Ken,
請問一下,我有一個指令需要延遲0.1s 才執(zhí)行,但使用for 又無法精準(zhǔn)的控制。
TMS570除了使用中斷以外,有更方便的延遲指令可以用嗎?
謝謝您
Shunfan
發(fā)表于 06-21 10:23
用stm32單片機(jī)輸出精準(zhǔn)脈沖數(shù),來控制步進(jìn)電機(jī)——程序
自己寫了一個簡單的程序來讓stm32f103單片機(jī)輸出精準(zhǔn)的脈沖個數(shù),分享給初學(xué)者們,希望有所幫助
發(fā)表于 07-11 15:22
stm32使用外部精準(zhǔn)時(shí)鐘
使用外部精準(zhǔn)時(shí)鐘#include "rcc_driver.h"http://1.硬件初始化:72MHzvoid rcc_init(void){//0.將RCC設(shè)置為缺省狀態(tài)
發(fā)表于 08-19 06:30
請問STM32F3如何使用HRTIM與ADC實(shí)現(xiàn)精準(zhǔn)BOOST轉(zhuǎn)換?
請問STM32F3如何使用HRTIM與ADC實(shí)現(xiàn)精準(zhǔn)BOOST轉(zhuǎn)換?
發(fā)表于 11-03 06:09
請問一下stm32的systick實(shí)現(xiàn)精準(zhǔn)延時(shí)的方法是什么?
請問一下stm32的systick實(shí)現(xiàn)精準(zhǔn)延時(shí)的方法是什么?
發(fā)表于 11-24 06:21
怎樣使用stm32外部時(shí)鐘去實(shí)現(xiàn)滴答計(jì)時(shí)器精準(zhǔn)延時(shí)呢
怎樣使用stm32外部時(shí)鐘去實(shí)現(xiàn)滴答計(jì)時(shí)器精準(zhǔn)延時(shí)呢?其代碼該怎樣去實(shí)現(xiàn)呢?
發(fā)表于 11-24 07:52
STM32精準(zhǔn)延時(shí)是什么意思
延時(shí),就是停在那,啥都不干,發(fā)呆。精準(zhǔn)延時(shí),就是發(fā)呆多長時(shí)間,是精確的。比如,要求某個IO口維持低電平1毫秒后,再維持高電平3毫秒,就需要把IO口拉高,然后延時(shí)1毫秒,再拉低,再維持3毫秒。類似這種
發(fā)表于 12-07 09:08
最簡單的延時(shí)到最精準(zhǔn)延時(shí)函數(shù)的各種寫法及原理
對于STM32系列的延時(shí)函數(shù)有著不同的寫法,本章將給大家?guī)碜詈唵蔚难訒r(shí)到最精準(zhǔn)延時(shí)函數(shù)的各種寫法及原理。在STM32系列中要學(xué)會用好systick定時(shí)器,這很重要一.普通延時(shí)函數(shù)原理:用C中累加
發(fā)表于 01-14 06:43
STM32F4延遲計(jì)時(shí)器的源代碼程序詳細(xì)資料免費(fèi)下載
本文檔的主要內(nèi)容詳細(xì)介紹的是STM32F4延遲計(jì)時(shí)器的源代碼程序詳細(xì)資料免費(fèi)下載。
發(fā)表于 08-31 16:28
?13次下載
具突破性的 0.5ppm INL、1Msps、無延遲 SAR ADC實(shí)現(xiàn)了真正的 20 位精準(zhǔn)度
具突破性的 0.5ppm INL、1Msps、無延遲 SAR ADC實(shí)現(xiàn)了真正的 20 位精準(zhǔn)度
發(fā)表于 03-21 12:00
?11次下載
STM32 PWM輸出延遲問題
事件原因:PWM正常初始化,監(jiān)聽串口數(shù)據(jù),根據(jù)上位機(jī)通訊協(xié)議,更改PWM的頻率和占空比,達(dá)到控制外圍輸出效果。調(diào)試效果:PWM在更改后,大概延遲5-10s才能正常輸出波形。解決方法:在更改完P(guān)WM
發(fā)表于 12-24 18:57
?12次下載
評論