stm32f407的gpio操作-64体育

×
单片机 > 单片机程序设计 > 详情

stm32f407的gpio操作

发布时间:2024-07-29 发布时间:
|

/*
#include "stm32f4_discovery.h"
#include "stm32f4xx_conf.h"
 


uint32_t gb_timingdelay;
void delay(uint32_t ntime);

void main( )
{
    systick_config(systemcoreclock / 1000); //设置systemtick 一毫秒中断
    rcc->ahb1enr |= 0x00000008; //使能gpiod 时钟
    rcc->apb2enr |= (1<<14); //使能syscfg 时钟
    gpiod->moder &= 0x00ffffff; //设置pd12,13,14,15 输出
    gpiod->moder |= 0x55000000;
    gpiod->otyper &= 0xffff0fff; //设置pd12,13,14,15 推挽输出
    gpiod->ospeedr &= 0x00ffffff; //pd12,13,14,15 速度100m
    gpiod->ospeedr |= 0xff000000;
    syscfg->cmpcr = 0x00000001; //使用io 补偿单元,
    //当gpio 速度超过50m 的时候要考虑使用此设置
    gpiod->pupdr &= 0x00ffffff; //pd12,13,14,15 无上拉无下拉
    gpiod->bsrrh = 0xf000; //reset register gpiox_bsrrh, write only
    //set register gpiox_bsrrl, write only
    
    while(1)
    {
        gpiod->bsrrh = 0xf000;
        gpiod->bsrrl = 0x1000;
        delay(100);
        gpiod->bsrrh = 0xf000;
        gpiod->bsrrl = 0x1000<<1;
        delay(100);
        gpiod->bsrrh = 0xf000;
        gpiod->bsrrl = 0x1000<<2;
        delay(100);
        gpiod->bsrrh = 0xf000;
        gpiod->bsrrl = 0x1000<<3;
        delay(100);
    }
}

void delay(uint32_t ntime)
{
    gb_timingdelay = ntime;
    while(gb_timingdelay != 0);
}
void systick_handler(void)
{
    if (gb_timingdelay != 0x00)
    {
        gb_timingdelay--;
    }
}
*/

#include "stm32f4_discovery.h"
#include "stm32f4xx_conf.h"
  
uint32_t gb_timingdelay;
void delay(uint32_t ntime);

void main( )
{
    systick_config(systemcoreclock / 1000); //设置systemtick 一毫秒中断
    
    /*
    //initialize leds mounted on stm32f4-discovery board 
    stm_eval_ledinit(led4);
    stm_eval_ledinit(led3);
    stm_eval_ledinit(led5);
    stm_eval_ledinit(led6);
      
    //turn on led4 and led5 
    stm_eval_ledon(led4);
    stm_eval_ledon(led5);
    
    while(1)
    {
        //toggle led3 and led6 
        stm_eval_ledtoggle(led3);
        stm_eval_ledtoggle(led6);

        //insert a delay 
        delay(100);

        //toggle led4 and led5 
        stm_eval_ledtoggle(led4);
        stm_eval_ledtoggle(led5);

        //insert a delay 
        delay(100);     
    }
    */
    
    //-------------------------------------
    gpio_inittypedef  gpio_initstructure;
  
    //enable the gpio_led clock 
    rcc_ahb1periphclockcmd(rcc_ahb1periph_gpiod, enable);

    //configure the gpio_led pin 
    gpio_initstructure.gpio_pin = gpio_pin_12;
    gpio_initstructure.gpio_mode = gpio_mode_out;
    gpio_initstructure.gpio_otype = gpio_otype_pp;
    gpio_initstructure.gpio_pupd = gpio_pupd_up;
    gpio_initstructure.gpio_speed = gpio_speed_50mhz;
    gpio_init(gpiod, &gpio_initstructure);
    //点亮这个灯
    gpiod->bsrrl = gpio_pin_12;
    
    while(1)
    {
        //  
        gpiod->odr ^= gpio_pin_12;
        //insert a delay 
        delay(100);     
    }
    
}

void delay(uint32_t ntime)
{
    gb_timingdelay = ntime;
    while(gb_timingdelay != 0);
}
void systick_handler(void)
{
    if (gb_timingdelay != 0x00)
    {
        gb_timingdelay--;
    }
}



『本文转载自网络,64体育的版权归原作者所有,如有侵权请联系删除』

热门文章 更多
stm32问题记录:这回keil编译器背锅
网站地图