新手入门 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> ...
随机推荐
- Neil·Zou 语录二
1 “Later equals never !”LeBlanc法则 2 爱情使人忘记时间,时间也会使人忘记爱情,不要让太多的昨天占据你的今天,请相信:是你的不管你怎样任性他都不会离开你:失去的其实 ...
- 使用github的使用,利用git shell命令行模式进行操作
一.登录到git,新建一个版本仓库 二.在"Repository name"一栏里填写版本仓库的名称,如"test",Description栏是描述,可填可不填 ...
- 总结-computer
常见问题 1.任务栏位置:%AppData%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar 2.锁定到任务栏的图标不见了: ...
- [转]推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler
在C#WINFORM或者是ASP.NET的WEB应用程序中,根据各种定时任务的需求,比如:每天的数据统计,每小时刷新系统缓存等等,这个时候我们得应用到定时器这个东东. .NET Framework有自 ...
- 获取真实Ip地址
/** * @author zhoulongqin * @see 获取客户端ip * @param * @return 客户端ip(String) webserve ip不一定获取的到 */ publ ...
- IntelliJ Idea 常用快捷键列表
Alt+回车 导入包,自动修正 sout+Tab Syso快捷键 Ctrl+Alt+F 局部变量变为全局变量 Ctrl+Alt+V 类似于eclipse中Ctrl+2+L的快捷键 Ctrl+Alt+T ...
- 配置Tomcat web保存文件到项目路径之外
<Host name="localhost" appBase="webapps" unpackWARs="true&qu ...
- float导致父级元素塌陷的问题
利用float进行页面布局时常常会出现父级元素没有高度的塌陷问题,如以下代码: <!DOCTYPE html> <html> <head lang="en&qu ...
- ORM系列之二:EF(3) 数据库连接
目录 1.前言 2.Code First默认连接 3.Code First指定数据库 4.自定义连接 前言 在介绍EF的Code First模式时候,我们没有修改任何配置,运行之后自动在LocalDb ...
- cloudera learning2:HDFS
存入HDFS的文件会按块(block)划分,默认每块128MB.默认1个block还有2个备份.备份增加了数据的可靠性和提高计算效率(数据本地化). HDFS部署可选择不支持HA,也可选择支持HA. ...