一、STM32寄存器简介 简单来说,寄存器就是存放东西的东西。从名字来看,跟火车站寄存行李的地方好像是有关系的。只不过火车站行李寄存处,存放的行李;寄存器可能存放的是指令、数据或地址。 存放数据的寄存器是最好理解的,如果你需要读取一个数据,直接到这个寄存器所在的地方来问问他,数据是多少就行了。问寄存器这个动作,叫做访问寄存器。不同的数据会存放在不同的寄存器,例如引脚PA2与PB8的高低电平数据(1或0)肯定放在不同的寄存器里,那么怎么区分不同的寄存器呢?通过地址,不同的寄存器有不同的地址,就像老张行李寄存处在101号店铺,老王行李寄存处在258号店铺。 指令、地址寄存器与数据寄存器类似,里边存放的都是0和1,毕竟单片机也只认识机器码,机器码都是0或1,只是特别的规定下,数据寄存器里面存放的0和1表示数据,指令寄存器里存放的表示指令。 ! Q0 Z1 E2 H* Z$ o' K 二、keil5添加stm32固件库2 Y+ W& h% n4 c$ f9 S keil5烧录前环境配置所需要文件:包括STM32下载软件FlyMcu,SYSTEM文件,C8T6数据手册,启动文件,USB串口驱动,下面创建keil5与烧录都需要用到。 ( v) U% r ~ x* O7 Y2 C) H7 B0 N 1、新建文件夹led,里面分别在创建OBJ和USER文件夹,备用。0 t8 j& F8 b+ O $ @9 }5 z, k$ S# C4 W$ T. i8 ^0 _( H 2、keil5新建工程,命名为led2。(不会创建的参考之前写的博客基于MDK创建纯汇编语言的STM32工程_小杨很勤奋的博客-CSDN博客). N& s6 _6 w. ^1 c 3.我们找到 Target1→Source Group1→双击→设置打开文件类型为 Asm Source file→选择 startup_stm32f10x_hd.s→点击 Add,如下图所示 添加之后如下图所示:) l5 M+ m+ i* q j: ~4 p" U 4、然后关闭keil5,打开led文件夹,把Listings 和Objects 文件夹里面的东西全部移到 OBJ 文件夹下,启动文件(startup_stm32f10x_md.s)、工程文件(test.uvprojx)等不可缺少的文件放在USER 文件夹下。 L0 ^" p3 Y# E 2 b+ z0 }0 h O& m 5、系统代码 拷贝 过来(即 SYSTEM文件夹,该文件夹由 ALIENTEK 提供,这些代码在任何 STM32F10x 的芯片上都是通用的,可以用于快速构建自己的工程。8 o$ j2 m# I. ?$ F! h- B X8 ] 注意一定要拷贝寄存器版本) 45步骤操作完结果如图(有两个文件在后续步骤中讲解,这里不用管):8 P/ ?( t1 w1 h 8 F* ~5 C7 V _9 a+ _' k 6、在 USER 文件夹下面找到 led.uvprojx,打开它,然后在 Target 目录树上点击右键→Manage Project Items,弹出对话框。, g4 J; Z. b) t7 x1 x0 p1 E ) }8 V2 f) z( E8 }- x2 I 在上面对话框的中间栏,点新建,新建 USER 和 SYSTEM 两个组。然后点击 Add Files 按钮,把 SYSTEM 文件夹三个子文件夹里面的:sys.c、usart.c、delay.c 加入到 SYSTEM 组中。注意:此时 USER 组下还是没有任何文件, 2 V9 ^5 `$ L0 T% ~% w 我们只添加SYSTEM的三个。 4 x" t5 O; r: i) M* G ; u R# K) V: |+ [ 结果如图所示:) p8 X& t+ W9 q0 |# H0 t, H + Y/ }- v/ d: {" Y* M. O * W! ]7 y7 F& g& n9 g( Q5 R5 p: S 7、接着,我们新建一个 test.c 文件,并保存在 USER 文件夹下。然后双击 USER 组,会弹出加载文件的对话框,此时我们在 USER 目录下选择 test.c 文件,加入到 USER 组下。 + v! q7 P# w; i4 H1 F 7 ~3 u/ K! L* m% W4 J- h 8、如此时编译,生成的中间文件,还是会存放在 Listings 和 Objects 文件夹下,所以,我们先设置输出路径,再编译。9 e. X+ N3 k$ }, E 点击魔法棒,弹出 Options for Target’Target 1’对话框,选择 Output 选项卡→选中 Create Hex File(用于生成 Hex 文件,后面会用到)→点击 Select Folder for Objects→找到 OBJ 文件夹→点击 OK ! Y+ \% m' y" M 接着,再设置 Listings 文件路径,同上,打开 Listing 选项卡→点击 Select Folder for Listings→找到 OBJ 文件夹→点击 OK 3 H1 ]* N- b" O( z 3 _3 A( ?2 }. u+ a# @/ V! Q 9、加入sys,delay,usar路径, 4 Q: P4 R: b+ w1 e 至此,工程文件就建立好了。, F9 s8 d* I( r! r3 q / g" |) Q, H4 c- t% h 三、编译代码部分; o- Q0 J' b8 R& G0 B8 s 1、打开工程文件 在led文件夹下新建一个HARDWARE文件夹,用来存放相关代码。! S1 l+ |. p# }5 K# x. u- _ 6 H6 D( Q1 X, x- h2 e 新建两个文件,然后保存在HARDWARE→LED 文件夹下面,保存为 led.c,led.h 我们将文件添加到工程中,步骤如下图7 h; L6 I& p( C; b3 W4 | + C' G% i6 L2 H! f+ s3 u . [" \7 f/ D$ u 2、记得在魔法棒这里将HARDWARE路径加进去,否则之后会报错。 ) R+ E# W( K" l: a& U 3.完整代码 led.c 代码
led.h: g3 [. S1 m# Q% v! X5 I
在USER文件夹下test.c代码8 i; ^2 l' X) h) v6 a
4、编译运行 发现报错了4 V8 v1 J8 i4 y3 i& P4 n - D9 d: A4 F* l. k 通过查询资料要取消一开始keil5 创建时环境配置中Starup的设置。 & V; H) s+ k" L0 w 再次编译0error,编译通过。* X6 a. P$ M. Y% X4 \ / v! [! w2 `6 h# n" r) U5 J( g 四、将程序烧录到STM32F103C8t6中去6 M8 K+ {- {3 ^3 E' a 1、驱动安装7 L0 O6 n" H3 t8 a& e' A 网盘中CH340-driver文件中安装驱动软件 ' J2 O M! }, E/ S1 } H3 v , c" D' ]0 {! o+ T; |7 K 2、硬件连接: K) P3 j- V- g 1 N3 y- r% m& C0 I. \' e9 K( | 1 e2 O" o& e6 c$ X" A$ W 同时将boot0设为1,boot1设为0,利用跳线帽实现 3、打开FlyMcu软件,选择led2.hex文件,勾选编程后执行,将代码烧进芯片2 P- Q0 w# u# S3 ^7 I. t7 r ( O& @+ Q; s6 Z5 X% j% M! s 4、电路连接2 ?2 ^2 R& V: t6 r: Z 2 S3 a; @% x9 c! V9 | 配置 BOOT0 为 0,BOOT1 随便设置都可以; R9 ]5 J" I5 ^$ E( n4 K+ Z9 Z- |+ _ 8 u3 l9 j# O" ? * C5 S6 B" i; s# z 线路连接 ! C3 U5 r1 ]* Z; `4 U & d$ Y+ G2 D& \0 N5 _. h 实验结果9 O# q( b, Z3 L: ?8 f7 A ———————————————— 版权声明:小杨很勤奋 ( x" [7 P6 {# P0 d( ]) X |
小马哥STM32F103开源小四轴RoboFly全部资料大放送
STM32固件库分享,超全系列整理
【MCU实战经验】+STM32F107的USB使用
基于STM32F103两轮平衡小车设计(开源)
STM32F107VCT6官方原理图和PCB
【福利】用STM32库的朋友有福了:STM32F10x_StdPeriph_Lib_V3.5.0chm...
基于STM32F10xx存储器和系统架构经验分享
基于STM32F1的CAN通信之BH1750
基于STM32F1的CAN通信之OLED
基于STM32F1的CAN通信之之串口IAP