STM32的简单程序

STM32的简单程序

步骤

  1. 建立一个工程文件,选择配置

    在这里插入图片描述

    选择芯片

在这里插入图片描述

  1. 在工程中建立一个main.c文件并写入一下代码:

    #define PERIPH_BASE           ((unsigned int)0x40000000)
    #define APB2PERIPH_BASE       (PERIPH_BASE + 0x10000)
    #define GPIOA_BASE            (APB2PERIPH_BASE + 0x0800)
    #define GPIOB_BASE            (APB2PERIPH_BASE + 0x0C00)
    #define GPIOC_BASE            (APB2PERIPH_BASE + 0x1000)
    #define GPIOD_BASE            (APB2PERIPH_BASE + 0x1400)
    #define GPIOE_BASE            (APB2PERIPH_BASE + 0x1800)
    #define GPIOF_BASE            (APB2PERIPH_BASE + 0x1C00)
    #define GPIOG_BASE            (APB2PERIPH_BASE + 0x2000)
    #define GPIOA_ODR_Addr    (GPIOA_BASE+12) //0x4001080C
    #define GPIOB_ODR_Addr    (GPIOB_BASE+12) //0x40010C0C
    #define GPIOC_ODR_Addr    (GPIOC_BASE+12) //0x4001100C
    #define GPIOD_ODR_Addr    (GPIOD_BASE+12) //0x4001140C
    #define GPIOE_ODR_Addr    (GPIOE_BASE+12) //0x4001180C
    #define GPIOF_ODR_Addr    (GPIOF_BASE+12) //0x40011A0C   
    #define GPIOG_ODR_Addr    (GPIOG_BASE+12) //0x40011E0C 
     
    #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
    #define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr))
     
     
    #define LED0  MEM_ADDR(BITBAND(GPIOA_ODR_Addr,8))
    //#define LED0 *((volatile unsigned long *)(0x422101a0)) //PA8
    typedef  struct
    {
       volatile  unsigned  int  CR;
       volatile  unsigned  int  CFGR;
       volatile  unsigned  int  CIR;
       volatile  unsigned  int  APB2RSTR;
       volatile  unsigned  int  APB1RSTR;
       volatile  unsigned  int  AHBENR;
       volatile  unsigned  int  APB2ENR;
       volatile  unsigned  int  APB1ENR;
       volatile  unsigned  int  BDCR;
       volatile  unsigned  int  CSR;
    } RCC_TypeDef;
     
    #define RCC ((RCC_TypeDef *)0x40021000)
     
    typedef  struct
    {
    volatile  unsigned  int  CRL;
    volatile  unsigned  int  CRH;
    volatile  unsigned  int  IDR;
    volatile  unsigned  int  ODR;
    volatile  unsigned  int  BSRR;
    volatile  unsigned  int  BRR;
    volatile  unsigned  int  LCKR;
    } GPIO_TypeDef;
     
    #define GPIOA ((GPIO_TypeDef *)GPIOA_BASE)
     
    void  LEDInit( void )
    {
         RCC->APB2ENR|=1<<2;  //GPIOA 时钟开启
         GPIOA->CRH&=0XFFFFFFF0;
         GPIOA->CRH|=0X00000003; 
    }
     
    //粗略延时
    void  Delay_ms( volatile  unsigned  int  t)
    {
         unsigned  int  i,n;
         for (n=0;n<t;n++)
             for (i=0;i<800;i++);
    }
     
    int  main( void )
    {
         LEDInit();
         while (1)
         {
             LED0=0;
             Delay_ms(500);
             LED0=1;
             Delay_ms(500);
         }
    }
     
    //声明SystemInit,防止报错
    void  SystemInit( void )
    {
         
    }
    
  2. 编译

    编译时配置

在这里插入图片描述
在这里插入图片描述

结果

F7运行
在这里插入图片描述
编译成功。

实验心得

在完全不懂的情况下,能胡乱搞出0 Error(s) 0 Warning(s)真的很不容易。代码也是copy的网络上大佬的,基本看不懂。

参考

https://blog.csdn.net/farsight1/article/details/80984834?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160221627819724835846326%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=160221627819724835846326&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v28-1-80984834.pc_first_rank_v2_rank_v28&utm_term=stm32%E6%9C%80%E7%AE%80%E5%8D%95%E7%A8%8B%E5%BA%8F&spm=1018.2118.3001.4187

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值