STMCU小助手
发布时间:2021-12-6 11:32
应用FPU
, l$ k1 p. g- s A 1、工程文件# K- u* {- h1 v/ Z; T6 g+ e $ o$ q: R; a" v7 u& W' C+ H startup_stm32f40_41xxx.s ' E5 }/ v8 i" e) P 4 B4 A) ~8 ~" ]( ]1 F' a9 V. g 新建一个 test.c 文件,并保存在 USER 文件夹下. c& R3 n/ E7 t4 I/ G# ] 2 b4 B- [/ T5 ^% M+ e- F 2、工程文件夹" Y) C+ @4 L5 G( ? 6 z, X+ Y" B' I1 k USER 文件夹专门用来存放启动文件(startup_stm32f40_41xxx.s)、工程文件(test.uvprojx)等不可缺少的文件,% K( ?, b% A* s2 y- o( { 6 X3 k1 Y! n9 v& i4 L OBJ 则用来存放这些编译过程中产生的中间文件(包括.hex 文件也将存放在这个文件夹里面) 2 \; @' w% ^( S; Z% _ SYSTEM文件夹,该文件夹由 ALIENTEK 提供,可以在光盘任何一个实例的工程目录下找到) N9 O: X! Y2 O5 Q) V1 \+ c 3、工程分组 Target 目录树上点击右键 Manage Project Items 我没改文件夹,还是用原来Objects,Listings
$ U/ [' X+ q- {1 }3 p9 P; o 9 }; H4 V" p- F. y4 V6 S6 O
" l$ d1 A% [( s, s 4、设置 # }4 d9 b6 _' ^0 I1 [
图中 1 处设置的 STM32F40_41xxx 宏,是为了兼容低版本的 MDK(比 如 MDK4/MDK3 等)才添加的,MDK5 在你选择器件的时候,就会内部定义这个宏,因此在 MDK5 下面,这里不设置也是可以的。但是为了兼容低版本的 MDK,我们还是将这个宏添加% w' p# {( Z$ U, K 进来。& Q9 M2 z: H2 }$ c: M9 M' f; M 图中 2 处是编译器优化选项,有-O0~-O3 四种选择(default 则是-O2),值越大,优化效果 x- W0 i) @; U! d" D 越强,但是仿真调试效果越差。这里我们选择-O0 优化,以得到最好的调试效果,方便开发代 码,在代码调试结束后,大家可以选择-O2 之类的优化,得到更好的性能和更少的代码占用量。8 Y; N. e2 t6 U 图中 3 处,One ELF Section per Function 主要是用来对冗余函数的优化。通过这个选项, 可以在最后生成的二进制文件中将冗余函数排除掉,以便最大程度地优化最后生成的二进制代 I. ]" [' d! R8 N* r6 [" X 码,所以,我们一般勾选上这个,这样可以减少整个程序的代码量。* i% p$ `% ~8 O- p3 m 然后在 Include Paths 处(4 处),点击 5 处的按钮。在弹出的对话框中加入 SYSTEM 文件% B& \6 A, @; Z& c 夹下的 3 个文件夹名字,把这几个路径都加进去(此操作即加入编译器的头文件包含路径,后 面会经常用到)。如图 3.2.22 所示: # J4 _7 H/ x% a4 x# a ! S5 I3 R/ Z6 ~) w 编译遇到错误: ( n; X) B- w0 m, W2 G/ U% I3 ~ SYSTEM\usart\usart.c(38): error: #260-D: explicit type is missing ("int" assumed) 解决: 函数前加void,这是printf函数的相关定义( G6 L8 H! D q+ J+ ]4 b$ T void _sys_exit(int x) warning:#1-D last line of file ends without a newline。这个警告是在告诉我们,在某个 C 文件的最后,没有输入新行,我们只需要双击这个 警告,跳转到警告处,然后在后面输入多一个空行就好了。 : X$ E1 \% D& l SYSTEM文件夹 1、delay- I( N. P3 l: x! H) ^5 e 8 o1 R- O, l4 J+ c 顾名思义:延时函数文件夹& o Q; z1 j( ^4 f/ g) X# q* j H " G& P. B, a: L! f1 D
" v1 H* B! |* i% f* R% s! D; t ***************SysTick定时器*****************着重理解 5 _. M2 q6 ?, x6 E. B RTOS会用到
$ Z# ]! D5 e9 w' q sys文件夹 ) [$ O) M+ ]% {* e
sys.c 和 sys.h 是由 ALIENTEK 提供,而其他 6 个文件,则都是拷贝自 STM32F4 的 CMSIS 库文件* l9 z- s, H8 V4 Z 4 L' E. B+ [# O3 J% M sys.h 9 h# |0 [) s0 B# n 实现对 STM32F4 各个 IO 口的位操作,包括读入和输出 PORTA的第七个 IO 口输出 1,则可以使用 PAout(6)=1;即可实现。我要判断 PORTA 的第 15 个位是否 等于 1,则可以使用 if(PAin(14)==1)/ I0 l0 c9 U* m* u6 z
************************时钟配置************************************ usart 文件夹8 C5 {; G0 y0 ?' S! W1 D: Z " d" m4 l; k. N/ x0 r& Y( b8 F/ w usart.c 和 usart.h 两个文件。这两个文件用于串口的初始化和中断接收/ q( L L( z1 P3 g) U# C9 K usart.c里面包含了2个函数一个是void USART1_IRQHandler(void);另外一个是void uart_init(u32 pclk2,u32 bound);里面还有一段对串口 printf 的支持代码,如果去掉,则会导致 printf 无法使 u9 r1 _ L' m! b, e- z3 h 用 在配置 STM32F4 外设的时候,任何时候都要先使能该外设的时钟! & G2 k8 w% i/ b- j! c; Y3 z- t q
6 H* }8 _' Q K3 } RCC->AHB1ENR|=1<<5;//使能 PORTF 时钟 5 r A% m, }* T, _- R- ? I/O 输出I 输入# _2 C0 U+ k5 {/ D F; u" _$ ? 1、使能时钟5 r9 u! K5 S) k$ X( Q * \) C! T0 g& M8 U0 W0 r 2、IO设置 void GPIO_Set(GPIO_TypeDef* GPIOx,u32 BITx,u32 MODE,u32 OTYPE,u32 OSPEED,u32 PUPD)+ A& ]; n. G9 L% i/ N q! u' R F+ R0 A; B //GPIO通用设置 3 n" l4 p0 j* r //GPIOx:GPIOA~GPIOI. //BITx:0X0000~0XFFFF,位设置,每个位代表一个IO,第0位代表Px0,第1位代表Px1,依次类推.比如0X0101,代表同时设置Px0和Px8. ?) q! {9 N7 o. P //MODE:0~3;模式选择,0,输入(系统复位默认状态);1,普通输出;2,复用功能;3,模拟输入., {, H+ r$ _; H4 M //OTYPE:0/1;输出类型选择,0,推挽输出;1,开漏输出. //OSPEED:0~3;输出速度设置,0,2Mhz;1,25Mhz;2,50Mhz;3,100Mh. //PUPD:0~3:上下拉设置,0,不带上下拉;1,上拉;2,下拉;3,保留.. g0 ]& c9 z$ g; M) F //注意:在输入模式(普通输入/模拟输入)下,OTYPE和OSPEED参数无效!!! Z! v) }6 [/ Y7 W2 d" I; s7 A5 I8 G, @3 h 3、PFout(n) PFin(n) # m2 A' O- y' j- d9 B( h- A " I) l1 E& k) O& N; F6 k 串口 , Q( a& H- M) ~ ~; b$ c STM32F4 的串口使用起来还是蛮简单的,只要你开启了串口时钟,并设置相应 IO 口的模式,然后配置一下波特率,数据位长度,奇偶校验位等信息,就可以使用了,; p4 D! @! t" k8 `) @ 2 k* O9 ~$ ]& b. }" }* F2 L5 y uart_init(84,115200); //串口初始化为 115200$ n4 p6 L0 B: h! p: I - Z' E2 \. h0 M# B N1 m% Y7 X, {- [- w* V |
【福利三:雨露均沾·逢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 官方根治方案
微信公众号
手机版