STMCU小助手
发布时间:2021-12-6 11:32
|
应用FPU $ q1 j% z3 m2 ]) W9 ?) ^ , o5 ~: n9 y/ f" L8 e
9 S$ n7 w2 v% h 1、工程文件7 r/ m V: u% I! J+ P 0 Z. g' K+ W, M7 d) d) \) r0 |3 p startup_stm32f40_41xxx.s . S1 [/ N% {% c1 Z, B 新建一个 test.c 文件,并保存在 USER 文件夹下 2、工程文件夹3 @: t0 x$ \) P# K: g I USER 文件夹专门用来存放启动文件(startup_stm32f40_41xxx.s)、工程文件(test.uvprojx)等不可缺少的文件,6 Y9 Y4 J( z0 C. Z: q/ S" T. I, K 8 m( {1 k1 B3 \ OBJ 则用来存放这些编译过程中产生的中间文件(包括.hex 文件也将存放在这个文件夹里面)- B/ B) u7 f0 U $ B, E! k* }5 d4 C5 o SYSTEM文件夹,该文件夹由 ALIENTEK 提供,可以在光盘任何一个实例的工程目录下找到 0 C% L( }) g$ y+ u; F9 \ 3、工程分组, `7 |/ M( j; |( F$ e( |7 s 1 c, R9 T; b: `; n3 e) h" p' r8 t* Q Target 目录树上点击右键 Manage Project Items , ]* g$ L! F# S& V' G 我没改文件夹,还是用原来Objects,Listings ; ` ]2 u5 j; s
" \/ |7 h3 f% v4 k; E
/ G' R- e+ Y! T' E# I 8 o0 T8 A2 y% O! x' I; ? 4、设置
图中 1 处设置的 STM32F40_41xxx 宏,是为了兼容低版本的 MDK(比, P8 Y9 B/ ]* M8 m; _: O) U! D 如 MDK4/MDK3 等)才添加的,MDK5 在你选择器件的时候,就会内部定义这个宏,因此在 MDK5 下面,这里不设置也是可以的。但是为了兼容低版本的 MDK,我们还是将这个宏添加 进来。6 W' S/ ?8 j5 n9 x 图中 2 处是编译器优化选项,有-O0~-O3 四种选择(default 则是-O2),值越大,优化效果 越强,但是仿真调试效果越差。这里我们选择-O0 优化,以得到最好的调试效果,方便开发代 码,在代码调试结束后,大家可以选择-O2 之类的优化,得到更好的性能和更少的代码占用量。0 R- {) p2 N, _9 V+ [8 | 图中 3 处,One ELF Section per Function 主要是用来对冗余函数的优化。通过这个选项, 可以在最后生成的二进制文件中将冗余函数排除掉,以便最大程度地优化最后生成的二进制代' ^" o4 A1 r+ H9 Q& ] 码,所以,我们一般勾选上这个,这样可以减少整个程序的代码量。: h4 U9 O' U7 Z; ^' n* o 然后在 Include Paths 处(4 处),点击 5 处的按钮。在弹出的对话框中加入 SYSTEM 文件 夹下的 3 个文件夹名字,把这几个路径都加进去(此操作即加入编译器的头文件包含路径,后. O5 r% L! Z! |; @" z, Z+ D 面会经常用到)。如图 3.2.22 所示:; v/ n- T3 ^; T9 ` - N: t- z' n5 a* @8 ~2 S 编译遇到错误:4 J+ y& ^" }, t) i SYSTEM\usart\usart.c(38): error: #260-D: explicit type is missing ("int" assumed) 9 A; f! l: Y$ x. q! F9 i" b 解决: 0 H- G) P- |) q 函数前加void,这是printf函数的相关定义 void _sys_exit(int x) warning:#1-D last line of file ends without a newline。这个警告是在告诉我们,在某个 C 文件的最后,没有输入新行,我们只需要双击这个) ^3 F5 f0 v K 警告,跳转到警告处,然后在后面输入多一个空行就好了。& K" R+ p1 t6 {0 l# a* o+ K, E2 P" c " U& D- @+ m, \3 J6 @* n/ v SYSTEM文件夹 ' _: {! N1 K7 e# M9 x8 Q7 D 1、delay 顾名思义:延时函数文件夹, B0 z1 M; z8 N: {5 g
$ \8 x( `+ j3 q3 I- g ***************SysTick定时器*****************着重理解' B- u( X2 i6 ]$ @- c) F4 x$ a / W9 i* O3 C$ t- J1 w, r/ O RTOS会用到" Q D; t7 r9 F- j
G; V. d$ d3 i sys文件夹3 G2 E j4 J3 W5 D, o( y
* l+ ]! P. N! h# }3 S8 _ sys.c 和 sys.h 是由 ALIENTEK 提供,而其他 6 个文件,则都是拷贝自 STM32F4 的 CMSIS 库文件1 p! C1 _- l& x/ x # A4 W( r& w2 W$ L- t sys.h * F" m, x% o- j! W 实现对 STM32F4 各个 IO 口的位操作,包括读入和输出 PORTA的第七个 IO 口输出 1,则可以使用 PAout(6)=1;即可实现。我要判断 PORTA 的第 15 个位是否 等于 1,则可以使用 if(PAin(14)==1)) P4 P( a0 ^7 J, h1 ^6 o / D& \1 u$ y+ H9 y0 K! C
************************时钟配置************************************: D3 Z) @) I4 ]" h usart 文件夹+ E; \% E# |4 X 3 C8 f0 A+ d6 e Y7 ^. d usart.c 和 usart.h 两个文件。这两个文件用于串口的初始化和中断接收 1 v' M- Y2 J/ ?# R. D1 G+ u usart.c里面包含了2个函数一个是void USART1_IRQHandler(void);另外一个是void uart_init(u32* z. r& ~0 O/ A4 r pclk2,u32 bound);里面还有一段对串口 printf 的支持代码,如果去掉,则会导致 printf 无法使" e/ r% a" D, |8 \" p 用 在配置 STM32F4 外设的时候,任何时候都要先使能该外设的时钟!% B8 E6 ~% K& p6 H- W: s$ @ . A6 j* D% J$ G0 h
1 \- y4 s! V' P6 V# @( _ RCC->AHB1ENR|=1<<5;//使能 PORTF 时钟 : O e$ J7 s$ } ^6 ]; @' b/ d F. }" ? I/O 输出I 输入2 o* `5 ` p5 T! g" d. g2 j - G N T0 B* e. B4 [ 1、使能时钟 % `' `! u8 l( J# M/ l D- M 2、IO设置 void GPIO_Set(GPIO_TypeDef* GPIOx,u32 BITx,u32 MODE,u32 OTYPE,u32 OSPEED,u32 PUPD)8 z7 H' {9 ?3 \ //GPIO通用设置 . n7 P- k% K$ @) A2 n) r! A) X //GPIOx:GPIOA~GPIOI. //BITx:0X0000~0XFFFF,位设置,每个位代表一个IO,第0位代表Px0,第1位代表Px1,依次类推.比如0X0101,代表同时设置Px0和Px8. //MODE:0~3;模式选择,0,输入(系统复位默认状态);1,普通输出;2,复用功能;3,模拟输入.. L# `6 H" r+ T2 V( i" {+ T! F z //OTYPE:0/1;输出类型选择,0,推挽输出;1,开漏输出.- W) L7 T" F. r" W2 m- S //OSPEED:0~3;输出速度设置,0,2Mhz;1,25Mhz;2,50Mhz;3,100Mh. . G8 n3 B- J! R, x% ` //PUPD:0~3:上下拉设置,0,不带上下拉;1,上拉;2,下拉;3,保留. //注意:在输入模式(普通输入/模拟输入)下,OTYPE和OSPEED参数无效!!/ w- f# F8 w& w i+ [/ R 3、PFout(n) PFin(n)( }. S' n) I' `% A7 r. T 串口. Z2 E/ T0 l) l5 d% f0 ]6 G) x+ X 0 M0 U9 K0 [* ~. P STM32F4 的串口使用起来还是蛮简单的,只要你开启了串口时钟,并设置相应 IO 口的模式,然后配置一下波特率,数据位长度,奇偶校验位等信息,就可以使用了, 4 G" l% J5 f7 U1 ?% O7 e uart_init(84,115200); //串口初始化为 115200 j5 N( l( J/ ~: r9 t; E( \ ' f+ U& S; ^4 O6 w& E |
【福利三:雨露均沾·逢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 官方根治方案
微信公众号
手机版