新手入门 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> ...
随机推荐
- 几款不错的VisualStudio2010插件
1.Gradient Selection 这个插件能使VisualStudio的高亮文本看起来是类似Blend的那样的效果,看起来更加舒服 2.LineAdornments 这个插件可以高亮光标所在的 ...
- 使用PowerShell读取SharePoint里列表的内容
1. 在https://www.microsoft.com/en-us/download/details.aspx?id=42038这里下载SharePoint Online Client Compo ...
- CSS方法论完全总结
软件开发领域所有的工程问题,归根结底衍生自一个问题:代码量大了怎么办? 对于CSS而言,因代码量增大导致的核心问题是命名冲突. 解决命名冲突的方法论是模块化,围绕此方法论,演化出种种模块化方案. 一. ...
- HJ-第二周,真机调试
报错: Showing Recent Issues Huiju_app requires a provisioning profile. Select a provisioning profi ...
- MySQL:动态开启慢查询日志(Slow Query Log)
前言 在开发中,高效能的程序 也包括 高效能的查询,所以优化SQL也是程序员必要技能之一.要优化就必须要有慢日志记录才可以知道哪些查询慢,然后反向去修改 慢日志设置方式 写入文件 写入数据库 实践操作 ...
- 初探Redis+Net在Windows环境下的使用
Redis官网地址:https://redis.io/:Redis官方暂时不支持Windows环境,但是MicroSoft Open Tech group开发了一个Windows平台下运行的版本. R ...
- MySQL 一些查询语句及技巧
生成唯一随机数 # 非补0版本 SELECT FLOOR(100000 + RAND() * 899999) AS random_number FROM target_table WHERE &quo ...
- 安装springboot时遇到 LoggerFactory is not a Logback LoggerContext but Logback is on the classpath.问题
将工程外部jar包删除slf4j就可以运行.
- AX2012 引用NOPI 添加图片到EXCEL
void AddPieChart(int rowNum = 4) { System.Byte[] bytes; fileName _fileName; NPOI.HSSF.UserModel.HSSF ...
- Windbg调试命令详解
作者:张佩][原文:http://www.yiiyee.cn/Blog] 1. 概述 用户成功安装微软Windows调试工具集后,能够在安装目录下发现四个调试器程序,分别是:cdb.exe.ntsd. ...