新手入门 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> ...
随机推荐
- 安卓中級教程(10):@InjectView
package com.example.android.db01; import android.app.Activity; import android.content.ContentValues; ...
- 数据库使用数据泵迁移遇到LOB字段
impdp system/Clic1234 attach=SYS_IMPORT_ILEARN_TRA desc ILEARN_TRA.NOTIFI_TACTIC desc ILEARN_TRA.MSG ...
- mysql排序时索引的注意事项
参考 'mysql高性能'
- GDB调试32位汇编堆栈分析
GDB调试32位汇编堆栈分析 测试源代码 #include <stdio.h> int g(int x){ return x+5; } int f(int x){ return g(x)+ ...
- PHP preg_replace使用例子
将 qwer://xxx/545/0 替换为 qwer://trading_system_xxx/0/545 $str = '<a href="qwer://xxx/545/0&quo ...
- php数字索引数组去重及恢复索引
$tmp = array('a','b','c','a'); $tmp = array_values(array_unique($tmp)); print_r($tmp);exit; //输出 Arr ...
- windows下mysqlbinlog二进制恢复
Mysql数据恢复主要针对Windows游戏引擎服务器意外宕机,以及游戏出现重大BUG,导致需要回档. 注意:请在恢复数据库之前,备份目标数据库,切记! 一.Windows服务器意外DOWN机,数据库 ...
- kafka集群搭建和使用Java写kafka生产者消费者
1 kafka集群搭建 1.zookeeper集群 搭建在110, 111,112 2.kafka使用3个节点110, 111,112 修改配置文件config/server.properties ...
- HBASE基础知识
HBASE的集群的搭建HBASE的表设计HBASE的底层存储模型 HBase 是一个高可靠.高性能.面向列.可伸缩的分布式缓存系统.利用HBase 技术可在廉价PC Server上搭建起大规模结构化存 ...
- Nginx location 匹配顺序整理
Nginx location模块整理 具体的Nginx安装就不在这里描述了,这里只是为了对location的描述 Nginx环境 a. 查看当前系统cat /etc/redhat-release [r ...