STMCU小助手
发布时间:2021-12-6 11:32
应用FPU
. C a5 o" F' v 9 ?9 c& B$ M4 V3 G5 c; W$ b+ G 1、工程文件/ v6 Q$ K3 P, O5 o; T4 q/ [ . J' o7 M6 `: |/ p& T startup_stm32f40_41xxx.s ! o" K p% C) i' D4 h 新建一个 test.c 文件,并保存在 USER 文件夹下 7 P2 U* R0 X+ ?3 | f- { 2、工程文件夹# x# a7 o1 ]* F8 g) R( T$ [; [' P( V$ d USER 文件夹专门用来存放启动文件(startup_stm32f40_41xxx.s)、工程文件(test.uvprojx)等不可缺少的文件,8 I5 @# I/ _) t3 g # r" F. L+ z7 E# y OBJ 则用来存放这些编译过程中产生的中间文件(包括.hex 文件也将存放在这个文件夹里面)3 H* O* j+ R; m; J- x1 Y3 s+ x1 }1 H / Q5 v5 L1 |: U7 h SYSTEM文件夹,该文件夹由 ALIENTEK 提供,可以在光盘任何一个实例的工程目录下找到 7 @6 \( H! d6 g2 T 3、工程分组 & F6 V4 T7 t% J+ P u5 @2 E2 H Target 目录树上点击右键 Manage Project Items 5 h' \/ D* i* \1 P$ _ 我没改文件夹,还是用原来Objects,Listings
. X1 i; {3 R8 @
, G. B% e* ~) ]; s" F. t2 s ; l( Y0 E' ^& q% ^0 y1 s: x 4、设置
图中 1 处设置的 STM32F40_41xxx 宏,是为了兼容低版本的 MDK(比 如 MDK4/MDK3 等)才添加的,MDK5 在你选择器件的时候,就会内部定义这个宏,因此在# Z* [1 l+ m6 Q- X6 m6 x MDK5 下面,这里不设置也是可以的。但是为了兼容低版本的 MDK,我们还是将这个宏添加, R, g5 ]$ z) C2 V L: i. N6 S 进来。) J; H0 b3 p1 g5 `1 {! L* h* @' ~8 L 图中 2 处是编译器优化选项,有-O0~-O3 四种选择(default 则是-O2),值越大,优化效果 越强,但是仿真调试效果越差。这里我们选择-O0 优化,以得到最好的调试效果,方便开发代: A+ z' T- `- y, | 码,在代码调试结束后,大家可以选择-O2 之类的优化,得到更好的性能和更少的代码占用量。 p& X- V; Q. f& Z( V6 ^ 图中 3 处,One ELF Section per Function 主要是用来对冗余函数的优化。通过这个选项,: ^' w' a, s3 }# v 可以在最后生成的二进制文件中将冗余函数排除掉,以便最大程度地优化最后生成的二进制代 码,所以,我们一般勾选上这个,这样可以减少整个程序的代码量。 然后在 Include Paths 处(4 处),点击 5 处的按钮。在弹出的对话框中加入 SYSTEM 文件 夹下的 3 个文件夹名字,把这几个路径都加进去(此操作即加入编译器的头文件包含路径,后' W: ? F0 p' e9 }5 @8 ]; c+ A 面会经常用到)。如图 3.2.22 所示:, m7 T) C C8 V2 f A! I) i; Q1 X% t I; s- F/ a& ? 编译遇到错误:# M# t0 i1 D# @: [# }. y$ y$ y SYSTEM\usart\usart.c(38): error: #260-D: explicit type is missing ("int" assumed)8 w* }& e6 k" \7 n0 l0 {1 a/ P, g 解决: 函数前加void,这是printf函数的相关定义3 U5 R3 n K: {4 z2 C) H void _sys_exit(int x)' h4 C! t, M& b4 p+ F/ e1 s warning:#1-D last line of file ends without a: \+ Y& d/ c; Z" M4 s; H newline。这个警告是在告诉我们,在某个 C 文件的最后,没有输入新行,我们只需要双击这个 警告,跳转到警告处,然后在后面输入多一个空行就好了。 ; X% b( G; I Z SYSTEM文件夹% t9 U$ {' s6 x/ v$ [ 3 Q: G* k" X1 W. q! G1 s! l 1、delay9 _. h) Z9 s* [/ X 顾名思义:延时函数文件夹
***************SysTick定时器*****************着重理解 RTOS会用到
2 }# d% a$ U8 t2 j* U8 g : F& _3 u8 {$ Y : W8 m1 A& J4 H/ v$ M' D sys文件夹1 P; U4 Q/ y: l5 }% `
+ R6 b0 ?; T0 R8 m sys.c 和 sys.h 是由 ALIENTEK 提供,而其他 6 个文件,则都是拷贝自 STM32F4 的 CMSIS 库文件/ Y; J. e6 P% L1 z 1 ]% |! c* k/ U6 P- K sys.h 8 c: {, O! t/ J# v 实现对 STM32F4 各个 IO 口的位操作,包括读入和输出3 K4 u+ g$ z! m- C + m0 [7 v4 v/ c. r PORTA的第七个 IO 口输出 1,则可以使用 PAout(6)=1;即可实现。我要判断 PORTA 的第 15 个位是否1 \( _1 y2 `2 c: e: y2 ~& P 等于 1,则可以使用 if(PAin(14)==1)
************************时钟配置************************************ usart 文件夹0 L* C! C0 B/ O% ]( [" z usart.c 和 usart.h 两个文件。这两个文件用于串口的初始化和中断接收! F: s: H1 T9 w2 [8 V7 s# G- y% h6 ~ 6 Y5 {8 H: a! f/ m4 E usart.c里面包含了2个函数一个是void USART1_IRQHandler(void);另外一个是void uart_init(u323 I8 F8 ]9 l4 M& @- w# X/ z6 y pclk2,u32 bound);里面还有一段对串口 printf 的支持代码,如果去掉,则会导致 printf 无法使& A" |6 |; L; `& y. T6 [- ?7 x 用 在配置 STM32F4 外设的时候,任何时候都要先使能该外设的时钟!" [$ a9 R; h2 y; x) a/ f# u 1 V: s5 \! b( W8 ?# P2 \
RCC->AHB1ENR|=1<<5;//使能 PORTF 时钟7 ?9 c" c# j* `* ? 9 C$ z, `1 D4 ]- ] 5 o& P% Q. }6 T9 e4 U# R' D/ Y% t I/O 输出I 输入( V& X2 y2 L. X7 ^$ T 4 r4 P7 N# U8 B" p4 M! {! N; P 1、使能时钟6 z& K- c$ e7 p- @1 \: g 2、IO设置 void GPIO_Set(GPIO_TypeDef* GPIOx,u32 BITx,u32 MODE,u32 OTYPE,u32 OSPEED,u32 PUPD)) O, a5 H: p6 h% K7 G7 I% D4 F ( n' A* ]' H2 I4 `3 }: c //GPIO通用设置 //GPIOx:GPIOA~GPIOI.2 @7 [; H1 E; C2 S //BITx:0X0000~0XFFFF,位设置,每个位代表一个IO,第0位代表Px0,第1位代表Px1,依次类推.比如0X0101,代表同时设置Px0和Px8. //MODE:0~3;模式选择,0,输入(系统复位默认状态);1,普通输出;2,复用功能;3,模拟输入.! R8 p1 u% k0 @1 A. i8 X, u7 Q% e& X/ j" c //OTYPE:0/1;输出类型选择,0,推挽输出;1,开漏输出. //OSPEED:0~3;输出速度设置,0,2Mhz;1,25Mhz;2,50Mhz;3,100Mh. //PUPD:0~3:上下拉设置,0,不带上下拉;1,上拉;2,下拉;3,保留.: O% ~( @# @: a, R2 R //注意:在输入模式(普通输入/模拟输入)下,OTYPE和OSPEED参数无效!!* P9 C9 {5 [$ ]$ _7 S# ^ 3、PFout(n) PFin(n)0 s8 w( q8 o, J; Q: L 串口8 t" R3 T; j4 d4 K o( j/ K 5 j7 M' G1 j$ m STM32F4 的串口使用起来还是蛮简单的,只要你开启了串口时钟,并设置相应 IO 口的模式,然后配置一下波特率,数据位长度,奇偶校验位等信息,就可以使用了,; G% g1 f' U' Y1 K " ~5 u" b9 L6 k1 J. N uart_init(84,115200); //串口初始化为 1152003 f% X* r9 u5 W: s9 |) K |
【福利三:雨露均沾·逢7狂欢】之四:用一个定时器同步另外两个定时器输出PWM
【逢7发帖赢大礼】STM32开发之WIFI实时时钟
【逢7发帖赢大礼】STM32开发之指纹识别!
【逢7发帖赢大礼】STM32开发之环境空气质量监测
【逢7发帖赢大礼】STM32开发之人体实时运动信息监测!
【逢7发帖赢大礼】STM32开发之IC门禁卡UID读取方法!
【逢7发帖赢大礼】全网最简单的Arduino_STM32开发环境搭建教程!
STM32F4中文用户手册
STM32F400、STM32F402 Cortex-M4超值单片机
SPI 高温读错最后一位?STM32F42xx 官方根治方案
微信公众号
手机版