在做18B20時需要用到精準的微秒定時器。
- 時鐘初始化,這里采用CW的例程,驅(qū)動HSI主頻為64M
void RCC_Configuration(void)
{
/* 0. HSI使能并校準 */
RCC_HSI_Enable(RCC_HSIOSC_DIV6);
/* 1. 設置HCLK和PCLK的分頻系數(shù)*/
RCC_HCLKPRS_Config(RCC_HCLK_DIV1);
RCC_PCLKPRS_Config(RCC_PCLK_DIV1);
/* 2. 使能PLL,通過HSI倍頻到64MHz */
RCC_PLL_Enable(RCC_PLLSOURCE_HSI, 8000000, RCC_PLL_MUL_8); // HSI 默認輸出頻率8MHz
///< 當使用的時鐘源HCLK大于24M,小于等于48MHz:設置FLASH 讀等待周期為2 cycle
///< 當使用的時鐘源HCLK大于48M,小于等于72MHz:設置FLASH 讀等待周期為3 cycle
__RCC_FLASH_CLK_ENABLE();
FLASH_SetLatency(FLASH_Latency_3);
/* 3. 時鐘切換到PLL */
RCC_SysClk_Switch(RCC_SYSCLKSRC_PLL);
RCC_SystemCoreClockUpdate(64000000);
}
- 在cw32l083_systick.c中增加三個函數(shù):
初始化ms、us的裝載初值,以實現(xiàn)毫秒、微秒的裝裝:
static uint32_t fac_ms ;
static uint32_t fac_us;
#define HclkFreq 64000000
void init_SysTick(void)
{
fac_ms = HclkFreq/1000U;
fac_us = fac_ms/1000U;
}
3、微秒延時函數(shù),實現(xiàn)的思路是用微少的時裝載初值*延時需要的時間,加載到計數(shù)器中(SysTick->Load),然后開始計時,查詢到計數(shù)器已經(jīng)在計時,且溢出標志位為1時中止計時,以實現(xiàn)微秒延時,代碼如下:
void delayTick_us(uint32_t nus)
{
uint32_t temp;
SysTick- >CTRL=0;
SysTick- >LOAD = fac_us*nus - 1;
SysTick- >CTRL = SysTick_CTRL_CLKSOURCE_Msk |SysTick_CTRL_ENABLE_Msk; //使能時鐘、開始計時
do {
temp = SysTick- >CTRL; //讀寄存器,判斷是否溢出位
}while(!(temp&(SysTick_CTRL_COUNTFLAG_Msk)) && (temp & 0x01));
SysTick- >CTRL=0; //停止計時
}
4、毫秒延時函數(shù)的實現(xiàn),由于毫秒的計數(shù)初值比較大,所以不能象微秒一樣直接把相乘的計數(shù)值裝載進LOAD寄存器中,需要以1毫秒為單位,在中斷中每一毫秒相加進行計數(shù),當計數(shù)值達到所需要的計數(shù)的值時,中止計時,來實現(xiàn)精準的延時。
代碼如下:
void delayTick_ms(uint32_t nms)
{
SysTick- >CTRL=0;
uwTick = 0;
SysTick_Config(fac_ms);
while(uwTick< nms);
SysTick- >CTRL=0;
uwTick = 0;
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
定時器
+關注
關注
23文章
3246瀏覽量
114719 -
RCC
+關注
關注
0文章
93瀏覽量
26932 -
Systick
+關注
關注
0文章
62瀏覽量
13071
發(fā)布評論請先 登錄
相關推薦
CW32L083串口中斷+定時器實現(xiàn)不定長數(shù)據(jù)接收
CW32L083 用串口中斷加定時器中斷實現(xiàn)串口的不定長數(shù)據(jù)的接收,特別適用于AT指令的接收。
武漢芯源Cortex-M0+ 32位低功耗MCU CW32L083系列產(chǎn)品介紹
~ 5.5V。極大程度滿足用戶各種使用環(huán)境。03 CW32L083系列選型指南和購買渠道主流開發(fā)設計工具和編程器廠家已實現(xiàn)對 CW32L083系列的支持。同時還有配套的開發(fā)工具,用于CW32
發(fā)表于 08-24 09:12
CW32L083產(chǎn)品介紹
CW32L083是一款基于eFlash的單芯片低功耗微控制器,集成了ARM?Cortex?-M0+
核心,主頻高達64MHz,高速嵌入式存儲器(高達256K字節(jié)的FLASH和
高達24K字節(jié)
發(fā)表于 09-14 06:41
評論