標(biāo)題: STM32F407 跑馬燈實(shí)驗(yàn) [打印本頁(yè)]

作者: heicad    時(shí)間: 2014-10-24 13:32
標(biāo)題: STM32F407 跑馬燈實(shí)驗(yàn)
STM32F4系列的GPIO寄存器和F1系列稍有不同,在這里介紹一下各個(gè)寄存器和專業(yè)名詞。PP:推挽輸出 PP+PU:帶上拉的推挽輸出 PP+PD:帶下拉的推挽輸出 OD:開(kāi)漏輸出 OD+PU:帶上拉的開(kāi)漏輸出 OD+PD:帶下拉的開(kāi)漏輸出Floating :浮空輸入 Analog:模擬輸入 MODER寄存器:設(shè)置GPIO模式寄存器,00輸入模式,01輸出模式,10復(fù)用模式,11模擬輸入模式。 OTYPER寄存器:設(shè)置GPIO類型寄存器,僅在做輸出時(shí)使用,0是推挽輸出,1是開(kāi)漏輸出。         OSPEEDR寄存器:設(shè)置GPIO速度寄存器,有四種速度。 PUPDR寄存器:設(shè)置上拉下拉寄存器       
設(shè)置步驟:
1. 使能GPIO時(shí)鐘
2. 設(shè)置相應(yīng)的IO口為輸入或輸出(MODER寄存器)
3. 設(shè)置輸入\輸出的類型(OTYPER寄存器)
4. 設(shè)置輸出的速度(OSPEEDR寄存器 )
5. 如果輸出速度>=50M,開(kāi)啟補(bǔ)償單元
6. 設(shè)置上拉下拉寄存器(PUPDR寄存器)
7. 通過(guò)復(fù)位置位寄存器和輸入輸出數(shù)據(jù)寄存器進(jìn)行操作。

    /*-----------------------------------------------------------------------------------------------------------------------------
    實(shí) 驗(yàn) 一: 跑 馬 燈
    作 者 : 冰 點(diǎn)
    日 期 :2014.2.20
    軟 件 平 臺(tái) : M D K 5.05
    ------------------------------------------------------------------------------------------------------------------------------*/
    #include <stm32f4xx.h>
    uint32_t Delaytime;
    void Delay(int time)
    {
    Delaytime=time;
    while(Delaytime!=0x00);
    }
    void LED_init(void)
    {
    RCC->AHB1ENR|=(1<<2);//開(kāi)GPIOC時(shí)鐘
    GPIOC->MODER&=0xfffffcfc;
    GPIOC->MODER|=0x00000101;//MODER寄存器設(shè)置IO作為輸入還是輸出
    GPIOC->OTYPER&=~((1<<0)|(1<<4));
    GPIOC->OSPEEDR&=0xfffffcfc;
    GPIOC->OSPEEDR|=0x00000303;//速度最快
    GPIOC->PUPDR&=0xfffffcfc;//無(wú)上拉下拉
    SYSCFG->CMPCR = 0x00000001; //使用IO補(bǔ)償單元 F2 F4新增功能,速度超過(guò)50MHZ時(shí)使用
    }
    void SysTick_Handler(void)
    {
    if(Delaytime!=0x00)
    Delaytime--;
    }
    int main(void)
    {
    SystemInit();
    SysTick_Config(SystemCoreClock/1000); // 每1ms中斷1次 SystemCoreClock=168MHZ 也就是1S 168M次


/*----------------------------------------------------------------------------------------------------------------------------- 實(shí) 驗(yàn) 一: 跑 馬 燈 作 者 : 冰 點(diǎn) 日 期 :2014.2.20 軟 件 平 臺(tái) : M D K 5.05------------------------------------------------------------------------------------------------------------------------------*/#include <stm32f4xx.h> uint32_t Delaytime;void Delay(int time){ Delaytime=time; while(Delaytime!=0x00); }void LED_init(void){ RCC->AHB1ENR|=(1<<2);//開(kāi)GPIOC時(shí)鐘 GPIOC->MODER&=0xfffffcfc; GPIOC->MODER|=0x00000101;//MODER寄存器設(shè)置IO作為輸入還是輸出 GPIOC->OTYPER&=~((1<<0)|(1<<4)); GPIOC->OSPEEDR&=0xfffffcfc; GPIOC->OSPEEDR|=0x00000303;//速度最快 GPIOC->PUPDR&=0xfffffcfc;//無(wú)上拉下拉 SYSCFG->CMPCR = 0x00000001; //使用IO補(bǔ)償單元 F2 F4新增功能,速度超過(guò)50MHZ時(shí)使用} void SysTick_Handler(void){ if(Delaytime!=0x00) Delaytime--;}int main(void){ SystemInit(); SysTick_Config(SystemCoreClock/1000); // 每1ms中斷1次 SystemCoreClock=168MHZ 也就是1S 168M次
在CODE上查看代碼片派生到我的代碼片


    LED_init(); // 中斷時(shí)間 =168M/1000/168M=0.001S=1ms


LED_init(); // 中斷時(shí)間 =168M/1000/168M=0.001S=1ms
[objc] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片


    while(1)
    {
    GPIOC->ODR^=((1<<0)|(1<<4));
    Delay(1000);

    }


作者: wcm_e    時(shí)間: 2015-1-12 23:09
有機(jī)會(huì)試試




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1