编写一个简单的stm32程序

  • 一 MDK的安装
  • 二编写一个简单的stm32程序
    • 准备工作
    • 编写程序代码

一 MDK的安装

keil官网网址下载
http://www.keil.com/download/product
1、下载完成MDK后,开始安装MDK5,点击安装包开始安装

2、同时要记得下载这些包哦

3、运行成功,出现安装导向,点击next

4、点击同意,继续next
5、选择安装路径,在这本人选择了E盘,读者可自行选择,选择完毕,继续next。

6、填写注册信息后继续next

7、就此安装一半过程啦,点击fish。

8、而后或出现如下窗口,按ok

9、如此桌面出现如下快捷方式,双击打开

10、点击文件,找到License Management打开

11、点击打开,找到并复制CID

12、与此同时在压缩包中打开

13、将刚刚复制的CID粘贴到此,,Target改为ARM

14、点击Cenerate创建,复制如下框去的部分

15、回到License Management,粘贴到此处,点击Add LIC按钮,安装完成。

二编写一个简单的stm32程序

准备工作

1、创建一个工程
1.1、打开Keil uVision5,打开project,点击New uVision Project

1.2、输入文件名称

1.3、选择需要使用的stm32芯片,这里选择了STM32F 103RB

1.4、对Run-Time Environment进行设置,设置完成后,点击ok,工程建立完成。

1.5、创建完开始编写程序,右键打开Source Group 1

1.6、继续点击添加一个文件
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201008111331908.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9
1.7、选择你要编写的语言,填写name

1.8、然后开始编写代码啦

编写程序代码

//宏定义,用于存放stm32寄存器映射
#define PERIPH_BASE           ((unsigned int)0x40000000)//AHB
#define APB2PERIPH_BASE       (PERIPH_BASE + 0x10000)
#define GPIOA_BASE            (APB2PERIPH_BASE + 0x0800)
//GPIOA_BASE=0x40000000+0x10000+0x0800=0x40010800,该地址为GPIOA的基地址
#define GPIOB_BASE            (APB2PERIPH_BASE + 0x0C00)
//GPIOB_BASE=0x40000000+0x10000+0x0C00=0x40010C00,该地址为GPIOB的基地址
#define GPIOC_BASE            (APB2PERIPH_BASE + 0x1000)
//GPIOC_BASE=0x40000000+0x10000+0x1000=0x40011000,该地址为GPIOC的基地址
#define GPIOD_BASE            (APB2PERIPH_BASE + 0x1400)
//GPIOD_BASE=0x40000000+0x10000+0x1400=0x40011400,该地址为GPIOD的基地址
#define GPIOE_BASE            (APB2PERIPH_BASE + 0x1800)
//GPIOE_BASE=0x40000000+0x10000+0x0800=0x40011800,该地址为GPIOE的基地址
#define GPIOF_BASE            (APB2PERIPH_BASE + 0x1C00)
//GPIOF_BASE=0x40000000+0x10000+0x0800=0x40011C00,该地址为GPIOF的基地址
#define GPIOG_BASE            (APB2PERIPH_BASE + 0x2000)
//GPIOG_BASE=0x40000000+0x10000+0x0800=0x40012000,该地址为GPIOG的基地址
#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类型别名
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类型别名
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;
//GPIOA指向地址GPIOA_BASE,GPIOA_BASE地址存放的数据类型为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;//LED熄灭Delay_ms(500);//延时时间LED0=1;//LED亮Delay_ms(500);//延时时间}
}

2.1、编译成功

简单的stm32程序相关推荐

  1. 嵌入式入门实践——编写简单STM32程序

    嵌入式入门--编写简单STM32程序 目录 嵌入式入门--编写简单STM32程序 一.环境配置 1.安装前准备 2.安装流程 2.1安装keil 2.2破解keil5 2.3安装STM32pack 3 ...

  2. 【嵌入式】简单stm32程序的运行与Proteus的仿真测试

    简单stm32程序的运行与Proteus的仿真测试 由于第一次使用keil5,多次尝试未能成功一次,故使用[学者-老栋]的固件包进行实验与测试来熟悉mdk开发环境和Proteus电路仿真软件. 参考: ...

  3. keil8个led灯闪烁c语言程序,简单的STM32 汇编程序—闪烁LED

    要移植操作系统,汇编是道不得不跨过去的坎.所以承接上篇的思路,我准备用汇编写一个简单的闪烁LED灯的程式.以此练习汇编,为操作系统做准备. 第一步,还是和上篇一样,建立一个空的文件夹. 第二步,因为是 ...

  4. 简单stm32程序编写以及调试

    简单stm32程序编写以及调试 一.环境配置 1.MDK的安装 MDK(Microcontroller Development Kit)是针对ARM处理器,特别是Cortex-M内核处理器的最佳开发工 ...

  5. qt串口采用队列_基于STM32的RGB调色器——STM32程序和Qt上位机全开源

    前言 uFUN开发板1.0版本评测时,基于Qt写了个小上位机,可以通过串口来控制板子上的RGB灯,通过控制,可以混合出任意的颜色,今天整理了一下,开源这个Qt上位机和STM32代码. 项目介绍 基于u ...

  6. 树莓派 st-link master使用ST-LINK V2下载STM32程序 支持F0 F1 F2 等

    这段时间在研究怎么脱机实现STM32的下载,同时也了解了Windows和Linux的下载方式,st官方只提供了Windows的下载工具,Linux的版本并未提供,这里网上搜索后找到了st-link m ...

  7. 简单分析STM32和51的区别

    分享本文,简单分析STM32与51单片机的区别与取舍之处. 单片微型计算机简称单片机,简单来说就是集CPU(运算.控制).RAM(数据存储-内存).ROM(程序存储).输入输出设备(串口.并口等)和中 ...

  8. 基于STM32的RGB调色器——STM32程序和Qt上位机全开源

    文章目录 前言 项目介绍 uFUN开发板 STM32下位机 Qt上位机 我的评测文章 关于我 前言 uFUN开发板1.0版本评测时,基于Qt写了个小上位机,可以通过串口来控制板子上的RGB灯,通过控制 ...

  9. 如何使用ubuntu编译stm32程序

    之前一直在做Linux应用层相关的工作,使用ubuntu编译代码.最近的项目中需要用到stm32,stm32的编译环境为keil5.在一台电脑上装两个编译器总数觉得麻烦,故而想能不能直接使用ubunt ...

最新文章

  1. 一个winform带你玩转rabbitMQ
  2. AB1601低功耗时烧写代码注意事项
  3. helm3 helm-push插件安装及基本使用
  4. Mybatis注解实现一对多关联映射(@Many)
  5. springboot实现单点登录_什么是单点登录,php是如何实现单点登录的
  6. SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换)
  7. LeetCode(832)——翻转图像(JavaScript)
  8. 打造“5G+IoT”生态,共创产业繁荣沃土
  9. php$.ajax(),使用PHP的jQuery $.ajax()
  10. DSSM模型的原理简介,预测两个句子的语义相似度
  11. 如何批量将 Word 文档转为 Svg 格式
  12. 愚见《Nighttime Visibility Enhancement by Increasing the Dynamic Range andSuppression of Light Effects》
  13. 谢烟客---------Linux之文件系统管理挂载
  14. C#开发的OpenRA游戏高性能内存访问的方法
  15. 零售3.0时代,国民品牌都市丽人一次成功的变革
  16. 转【面向代码】学习 Deep Learning(二)Deep Belief Nets(DBNs)
  17. java字符串反转reverse();
  18. 批量启动docer容器shell脚本
  19. K8S:Volume
  20. Java找工作的准备点

热门文章

  1. 高斯滤波的开始——高斯核的计算
  2. 重庆SEO优化高手更新网站文章的窍门
  3. 计算机一个字节是几位,电脑的一个字节等于多少位??
  4. impala与hive的比较以及impala的有缺点
  5. [2021.05.26]AudioTrack流程分析
  6. 用Python从零复现A星寻路算法 | 手撕代码#1
  7. Java并发编程(一)—— FutureTask超详细教程
  8. 软件测试方法的分类及工具推荐
  9. access select max_超级玛丽2号Max:挑选重疾险需要避开这3大误区!
  10. day063:红黑树、红黑规则