• 新手入门 keil MDK5 建立STM32工程


    keil uvison 是用来开发 单片机的,Keil mdk 是用来开发 ARM 的。

    芯片型号是:STM32F103RB6

    1,新建工程

    配置属性

    晶振为8M 根据实际晶振选择

    生成 HEX 文件,选中

    2,复制启动文件,头文件,这里为了简单,全部放在了项目文件夹中,不像有的教程,要建这个,配置那个,新手容易头大。

    启动文件在,STM32F10x_StdPeriph_Lib_V3.5.0.rar 里面,解压LIB库文件。

    复制 STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3CoreSupport 里面的 core_cm3.h core_cm3.c 到项目文件夹中。

    复制 STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3DeviceSupportSTSTM32F10x 里面的 3个文件 stm32f10x.h system_stm32f10x.c  system_stm32f10x.h 到项目文件夹中。

    复制启动文件 STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3DeviceSupportSTSTM32F10xstartuparm 里面的 startup_stm32f10x_md.s

    md hd ld 根据芯片FLASH 容量决定用哪个。

    16K < FLASH < 32K ld
    64K < FLASH < 128K md
    256K < FLASH < 512K hd

    文件复制好以后就是这个样子。

    双击,添加文件到项目中。

    新建一个 main.c 文件,并添加到项目中。

     1 #include "stm32f10x.h"
     2 #include "bitband.h"
     3 
     4 void delay()
     5 {
     6     int i=30000;
     7       while(i--);
     8 }
     9 
    10 int main(void)
    11 {
    12     //初始化引脚
    13     //PA2 接 BEEP    
    14       //初始化 PA 时钟
    15       RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
    16       //配置引脚模式
    17       GPIOA->CRL &= ~(0x3<<(4*2+2));
    18       GPIOA->CRL |= 0x3<<(4*2);
    19     
    20         while(1)
    21         {
    22               GPA_ODR(2) = 1;
    23               delay();
    24               GPA_ODR(2) = 0;
    25               delay();
    26         }
    27     return 0;
    28 }
    bitband.h 是一个 bit 位映射功能 操作时简单,不用比较位,节省时间。
     1 /**
     2  * (*(volatile unsigned long *) 是 先把一个 long 数字转为指针 在加 * 就是取它的内容
     3  * volatile 是告诉编译器不要优化
     4  */
     5 #define BITBAND(addr, bitnum) ((addr&0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)) 
     6 #define MEM_ADDR(addr) *((volatile unsigned long  *)(addr)) 
     7 #define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum)) 
     8 
     9 #define GPA_IDR(n) BIT_ADDR(GPIOA_BASE+0x8, n)
    10 #define GPB_IDR(n) BIT_ADDR(GPIOB_BASE+0x8, n)
    11 #define GPC_IDR(n) BIT_ADDR(GPIOC_BASE+0x8, n)
    12 #define GPD_IDR(n) BIT_ADDR(GPIOD_BASE+0x8, n)
    13 #define GPE_IDR(n) BIT_ADDR(GPIOE_BASE+0x8, n)
    14 
    15 #define GPA_ODR(n) BIT_ADDR(GPIOA_BASE+0xc, n)
    16 #define GPB_ODR(n) BIT_ADDR(GPIOB_BASE+0xc, n)
    17 #define GPC_ODR(n) BIT_ADDR(GPIOC_BASE+0xc, n)
    18 #define GPD_ODR(n) BIT_ADDR(GPIOD_BASE+0xc, n)
    19 #define GPE_ODR(n) BIT_ADDR(GPIOE_BASE+0xc, n)
    20 #define GPF_ODR(n) BIT_ADDR(GPIOF_BASE+0xc, n)
    21 
    22 #define GPA_BSRR(n) BIT_ADDR(GPIOA_BASE+0x10, n)
    23 #define GPB_BSRR(n) BIT_ADDR(GPIOB_BASE+0x10, n)
    24 #define GPC_BSRR(n) BIT_ADDR(GPIOC_BASE+0x10, n)
    25 #define GPD_BSRR(n) BIT_ADDR(GPIOD_BASE+0x10, n)
    26 #define GPE_BSRR(n) BIT_ADDR(GPIOE_BASE+0x10, n)
    27 #define GPF_BSRR(n) BIT_ADDR(GPIOF_BASE+0x10, n)
    28 
    29 #define GPA_BRR(n) BIT_ADDR(GPIOA_BASE+0x14, n)
    30 #define GPB_BRR(n) BIT_ADDR(GPIOB_BASE+0x14, n)
    31 #define GPC_BRR(n) BIT_ADDR(GPIOC_BASE+0x14, n)
    32 #define GPD_BRR(n) BIT_ADDR(GPIOD_BASE+0x14, n)
    33 #define GPE_BRR(n) BIT_ADDR(GPIOE_BASE+0x14, n)
    34 #define GPF_BRR(n) BIT_ADDR(GPIOF_BASE+0x14, n)

    这里的 0xc 0x8 0x10 就是根据 寄存器的位置来决定的。

  • 相关阅读:
    Python判断列表是否已排序的各种方法及其性能分析
    Python实现C代码统计工具(四)
    Python代码统计工具
    Python实现C代码统计工具(三)
    Python实现C代码统计工具(一)
    Python标准输出重定向
    为C函数自动添加跟踪语句
    Python2.7字符编码详解
    Python实现Linux命令xxd -i功能
    1124 Raffle for Weibo Followers (20 分)
  • 原文地址:https://www.cnblogs.com/ningci/p/5555303.html
Copyright © 2020-2023  润新知