新手入门 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.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工程的更多相关文章
- IAR建立stm32工程
stm32是一个当下非常流行的微控制器,很多人都加入了学习stm32的行列中,常用的stm32编译器有IAR和mdk两种,接下来是利用stm32固件库3.5在IAR下的建立的工程模板历程: 1.在常用 ...
- 以防忘记,建立stm32工程的过程
然后会弹出manage run -time environment的运行环境界面,必须选择的有CMSIS下的core和device下的startup,至于其它的根据你需要的外设, 在stdperiph ...
- 使用keil建立标准STM32工程模版(图文详细版!)
1. 模板工程的创建(超级详细版,使用的是keil 4.5版本) 1.1创建工程目录 良好的工程结构能让文件的管理更科学,让开发更容易更方便,希望大家养成良好的习惯,使用具有合理结构的工程目录,当 ...
- 基于IAR6或者IAR7建立STM32开发工程(通过实际测试,使用IAR6.30.4)
IAR和keil两个开发平台都是arm开发当中比较流行的平台,keil4的版本之间,可以兼容,但是版本4和版本5还是不兼容的,但是IAR的兼容性更加差,好像6.30.x之间是能够兼容的吧,没有实测过, ...
- STM32开发环境--使用MDK建立一个工程
STM32开发环境--使用MDK建立一个工程 该工程模版是基于库函数基础制作而成,其中有借鉴相关资料.虽然工程模版一旦建立,以后任何项目只需套用即可,但考虑到长时间不使用,在将来某天可能会突然用到,再 ...
- 【原创】新手入门一篇就够:从零开发移动端IM
一.前言 IM发展至今,已是非常重要的互联网应用形态之一,尤其移动互联网时代,它正以无与论比的优势降低了沟通成本和沟通代价,对各种应用形态产生了深远影响. 做为IM开发者或即将成为IM开发者的技术人员 ...
- 即时通讯新手入门:一文读懂什么是Nginx?它能否实现IM的负载均衡?
本文引用了“蔷薇Nina”的“Nginx 相关介绍(Nginx是什么?能干嘛?)”一文部分内容,感谢作者的无私分享. 1.引言 Nginx(及其衍生产品)是目前被大量使用的服务端反向代理和负载均衡 ...
- 《IM开发新手入门一篇就够:从零开发移动端IM》
登录 立即注册 TCP/IP详解 资讯 动态 社区 技术精选 首页 即时通讯网›专项技术区›IM开发新手入门一篇就够:从零开发移动端IM 帖子 打赏 分享 发表评论162 想开 ...
- 新手入门指导:Vue 2.0 的建议学习顺序
起步 1. 扎实的 JavaScript / HTML / CSS 基本功.这是前置条件. 2. 通读官方教程 (guide) 的基础篇.不要用任何构建工具,就只用最简单的 <script> ...
随机推荐
- 谢欣伦 - OpenDev原创教程 - 客户端套接字类CxClientSocket
这是一个精练的客户端套接字类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxClientSocket的使用如下(以某个叫做CSo ...
- linux系统安装(下)
Grub引导装载程序 目录简单介绍 /dev存放了设备文件 /dev/sad硬盘文件 root/install.log安装日志 root/kickstart包含这次安装信息,下次若需要相同安装可 ...
- matlab函数大全
Matlab 图像处理相关函数命令大全 一.通用函数: colorbar 显示彩色条 语法:colorbar \ colorbar('vert') \ colorbar('horiz') \ col ...
- O(n) 筛法求素数
var tot,i,j,k,m,n:longint; prime:array[0..100000] of boolean; p:array[0..100000] of longint;begin re ...
- swift 2.x学习笔记(三)
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #008400 } p.p2 { margin: 0.0px 0. ...
- java classpath getResource getResourceAsStream
1.classpath 用于指定java运行时,jvm寻找class文件以及jar文件的存储目录.jvm依据classpath中出现的jar文件以及目录,依次寻找,直到找到指定class文件. 例:j ...
- 微信 {"errcode":40029,"errmsg":"invalid code, hints: [ req_id: Cf.y.a0389s108 ]"}
{"errcode":,"errmsg":"invalid code, hints: [ req_id: Cf.y.a0389s108 ]" ...
- centos6修改nameserver
1.直接修改/etc/resolv.conf,重启网卡 #service network restart 后发现并没有修改掉 2.直接修改ifcfg-eth0文件 /etc/sysconfig/net ...
- Tomcat常见问题汇总
1.在服务器上一定要开启-server参数 #直接在一堆注释下添加即可 #即是在 # OS specific support.注释之前 JAVA_OPTS= -server 2.tomcat启动很慢 ...
- Zookeeper学习笔记
ZK ID存放路径 /tmp/zookeeper/myid