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

芯片型号是:STM32F103RB6

1,新建工程

配置属性

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

生成 HEX 文件,选中

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

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

复制 STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport 里面的 core_cm3.h core_cm3.c 到项目文件夹中。

复制 STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x 里面的 3个文件 stm32f10x.h system_stm32f10x.c  system_stm32f10x.h 到项目文件夹中。

复制启动文件 STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm 里面的 startup_stm32f10x_md.s

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

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

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

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

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

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

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

新手入门 keil MDK5 建立STM32工程的更多相关文章

  1. IAR建立stm32工程

    stm32是一个当下非常流行的微控制器,很多人都加入了学习stm32的行列中,常用的stm32编译器有IAR和mdk两种,接下来是利用stm32固件库3.5在IAR下的建立的工程模板历程: 1.在常用 ...

  2. 以防忘记,建立stm32工程的过程

    然后会弹出manage run -time environment的运行环境界面,必须选择的有CMSIS下的core和device下的startup,至于其它的根据你需要的外设, 在stdperiph ...

  3. 使用keil建立标准STM32工程模版(图文详细版!)

    1.   模板工程的创建(超级详细版,使用的是keil 4.5版本) 1.1创建工程目录 良好的工程结构能让文件的管理更科学,让开发更容易更方便,希望大家养成良好的习惯,使用具有合理结构的工程目录,当 ...

  4. 基于IAR6或者IAR7建立STM32开发工程(通过实际测试,使用IAR6.30.4)

    IAR和keil两个开发平台都是arm开发当中比较流行的平台,keil4的版本之间,可以兼容,但是版本4和版本5还是不兼容的,但是IAR的兼容性更加差,好像6.30.x之间是能够兼容的吧,没有实测过, ...

  5. STM32开发环境--使用MDK建立一个工程

    STM32开发环境--使用MDK建立一个工程 该工程模版是基于库函数基础制作而成,其中有借鉴相关资料.虽然工程模版一旦建立,以后任何项目只需套用即可,但考虑到长时间不使用,在将来某天可能会突然用到,再 ...

  6. 【原创】新手入门一篇就够:从零开发移动端IM

    一.前言 IM发展至今,已是非常重要的互联网应用形态之一,尤其移动互联网时代,它正以无与论比的优势降低了沟通成本和沟通代价,对各种应用形态产生了深远影响. 做为IM开发者或即将成为IM开发者的技术人员 ...

  7. 即时通讯新手入门:一文读懂什么是Nginx?它能否实现IM的负载均衡?

    本文引用了“蔷薇Nina”的“Nginx 相关介绍(Nginx是什么?能干嘛?)”一文部分内容,感谢作者的无私分享. 1.引言   Nginx(及其衍生产品)是目前被大量使用的服务端反向代理和负载均衡 ...

  8. 《IM开发新手入门一篇就够:从零开发移动端IM》

        登录 立即注册 TCP/IP详解 资讯 动态 社区 技术精选 首页   即时通讯网›专项技术区›IM开发新手入门一篇就够:从零开发移动端IM   帖子 打赏 分享 发表评论162     想开 ...

  9. 新手入门指导:Vue 2.0 的建议学习顺序

    起步 1. 扎实的 JavaScript / HTML / CSS 基本功.这是前置条件. 2. 通读官方教程 (guide) 的基础篇.不要用任何构建工具,就只用最简单的 <script> ...

随机推荐

  1. Java中&&和&的区别

    Java中&&和&都是表示与的逻辑运算符,都表示逻辑运输符and,当两边的表达式都为true的时候,整个运算结果才为true,否则为false. &&的短路功能 ...

  2. kafka综合介绍

    设计目标 高吞吐率.即使在非常廉价的商用机器上也能做到单机支持每秒100K条以上消息的传输. 支持Kafka Server间的消息分区,及分布式消费,同时保证每个Partition内的消息顺序传输 同 ...

  3. address_add

    <include file="Header:header-address_add" /> <include file="Header:header-pu ...

  4. test hypertext links for validity, accessibility, and recent modification

    https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html The HEAD method is identical to GET except th ...

  5. MULTITHREADING AND CHIP MULTIPROCESSORS

    COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION The most important me ...

  6. Shell 重定向

    一直没搞懂 &> 和 <& 是表示什么意思. 今天自己总结一下,希望自己能理解它的真正含义. 重定向标准输入输出,切记 “1” 和 “>”之间没有空格 $ > ...

  7. SQL2008还原数据库无法还原问题

    SQL2008还原备份的SQL2008的.bak文件时会报错,大部分原因是因为当前登录的版本是2005的,因而无法还原用SQL2008备份的数据,结局的办法是去掉登录的服务器名称后面的后缀SQLEXP ...

  8. Ubuntu 14.04 编译安装 husky

    简介 Husky是一个大数据分布式开发框架,用C++开发,因为粗粒度(coarse-grained)平台(如Spark,Hadoop,Flink)MR耗时太大,然后细粒度(fine-grained)平 ...

  9. ios导航器跳转动画

    出栈或压栈简单实现动画   CATransition *animation1=[CATransition animation];//类方法创建一个切换对象     animation1.duratio ...

  10. LeetCode Intersection of Two Arrays II

    原题链接在这里:https://leetcode.com/problems/intersection-of-two-arrays-ii/ 题目: Given two arrays, write a f ...