★ 可以直接複製貼上到 C 語言開發環境中,此程式碼可以直接編譯執行(只要你配置好開發環境與硬體)。

/*
* 名稱:STM32F4 入門:SysTick 系統時鐘
*
* 作者:黃彥霖 
* 來源:http://lolikitty.pixnet.net
*
* 你需要非常精確的定時,請照以下操做:
* 如果你使用外部震盪器為 8 MHz 則請你先檢查(其他頻率同理):
* 1. system_stm32f4xx.c 的 #define PLL_M 等於 8 (預設這是25,你延遲會慢3倍!!)
* (----------以下改了求心安,本程式實際測式似乎沒甚麼太大效果-----------)
* 2. stm32f4xx.h 的  #define HSE_VALUE 的 25000000 改為 8000000 
* 3. stm32f4xx_conf.h  的 #define HSE_VALUE 的 8000000 不變
* 4. Kill-MDK 的 Project/Option for Target 的 Target 頁簽 Xtal (MHz) 改為 8.0
*/
 
#include "stm32f4xx.h"
 
static volatile int TimingDelay; // 防止編譯器優化,所以加上 volatile
 
/*
* 滴答中斷(Tick Interrupt),此涵式建議寫在:stm32f4xx_it.c 中
* 中斷次數=實體頻率/自訂值,自訂值由 SysTick_Config() 設定
*/
void SysTick_Handler(void)
{
    // TimingDelay 由 Delay() 給值,只要不為 0 他將會一直遞減下去...
    if (TimingDelay != 0)
    { 
        TimingDelay--;
    }
}
 
/*
* 延遲函數
*/
void Delay(int nTime)
    // 將 nTime 傳給 TimingDelay,之後讓 TimingDelay 遞減
    TimingDelay = nTime;
 
    // 等待 SysTick_Handler() 中斷涵式
    // 把 TimingDelay 減到 0 才跳出迴圈
    // TimingDelay 非零將會一直空轉
    while(TimingDelay != 0);
}
 
/*
* 初始化 LED
*/
void LED_Init(void){
    GPIO_InitTypeDef  GPIO_InitStructure;
 
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
 
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;  
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 
    GPIO_Init(GPIOD, &GPIO_InitStructure);
}
 
/*
* 主程式
*/
int main()
{
    LED_Init();// 初始化 LED
 
    // 設定 滴答時鐘(IC的心跳),中斷次數=實體頻率/自訂值
    // 如果系統頻率為 168MHz,而這裡我設定16800,則每秒會中斷 1000 次
    if (SysTick_Config(168000)) // 168000 也可以用 SystemCoreClock / 1000 取代
    { 
        while (1);// SysTick_Config() 的值設定太大,所以終止繼續運行 (人為疏失)
    }
 
    while(1)
    {
        GPIO_SetBits(GPIOD,GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15); // LED 點亮
        Delay(1000); // 延遲一秒
        GPIO_ResetBits(GPIOD,GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15); // LED 熄滅
        Delay(1000); // 延遲一秒   
    }
}
 
 
 
 
 
 
 
 
 
 
 
 
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 黃彥霖 的頭像
    黃彥霖

    彥霖 實驗筆記

    黃彥霖 發表在 痞客邦 留言(1) 人氣()