STMCU小助手
发布时间:2021-12-6 11:32
应用FPU
# \7 H' Z |9 T5 j ( e2 a- K3 |/ ?7 E9 x 1、工程文件0 B9 _# y9 [& ]8 f startup_stm32f40_41xxx.s ( s3 F" o. J, i- o) v% ]# y& o 新建一个 test.c 文件,并保存在 USER 文件夹下 2、工程文件夹$ O4 A. @: l4 I% ~% ^! [( Q- I ( O! e) D- M+ K% m f9 P USER 文件夹专门用来存放启动文件(startup_stm32f40_41xxx.s)、工程文件(test.uvprojx)等不可缺少的文件,& w( h6 [3 B% t. ] OBJ 则用来存放这些编译过程中产生的中间文件(包括.hex 文件也将存放在这个文件夹里面) ) p8 k& o, n' b7 B. C3 F/ a! l SYSTEM文件夹,该文件夹由 ALIENTEK 提供,可以在光盘任何一个实例的工程目录下找到7 y4 e+ e% H8 Z! j 3、工程分组0 w0 B, V6 e |4 K& r" Q 8 v3 H" z' \: p Y4 [& i Target 目录树上点击右键 Manage Project Items 9 @4 d* o9 r$ t; H. G# t5 z" V" {# U 我没改文件夹,还是用原来Objects,Listings/ D. p9 F! N1 P5 u5 ] 5 }; S% \/ K1 L: _* {5 j0 A
- U! E) i6 V9 j " j8 v# k2 C$ v1 z& F 4、设置
图中 1 处设置的 STM32F40_41xxx 宏,是为了兼容低版本的 MDK(比 如 MDK4/MDK3 等)才添加的,MDK5 在你选择器件的时候,就会内部定义这个宏,因此在. |: w" @$ a6 E6 j# h MDK5 下面,这里不设置也是可以的。但是为了兼容低版本的 MDK,我们还是将这个宏添加3 c8 A g( c0 z, A 进来。 图中 2 处是编译器优化选项,有-O0~-O3 四种选择(default 则是-O2),值越大,优化效果 越强,但是仿真调试效果越差。这里我们选择-O0 优化,以得到最好的调试效果,方便开发代$ P% N7 u6 k8 `7 u 码,在代码调试结束后,大家可以选择-O2 之类的优化,得到更好的性能和更少的代码占用量。 图中 3 处,One ELF Section per Function 主要是用来对冗余函数的优化。通过这个选项, 可以在最后生成的二进制文件中将冗余函数排除掉,以便最大程度地优化最后生成的二进制代3 h5 B* z* T* Z 码,所以,我们一般勾选上这个,这样可以减少整个程序的代码量。 然后在 Include Paths 处(4 处),点击 5 处的按钮。在弹出的对话框中加入 SYSTEM 文件- O q* F8 t& h* ^ 夹下的 3 个文件夹名字,把这几个路径都加进去(此操作即加入编译器的头文件包含路径,后 面会经常用到)。如图 3.2.22 所示: - h8 O8 S% Q5 h. M7 T 编译遇到错误: ' i5 Y; q: {5 Z SYSTEM\usart\usart.c(38): error: #260-D: explicit type is missing ("int" assumed)/ M- x: y$ U* n" }3 J7 S& b% g6 G& h 解决:) `1 E* T* V& P8 r/ t2 T9 E: ^ ' C" {4 t& D8 R/ x) C 函数前加void,这是printf函数的相关定义9 M# ?, Q" I0 B% p) f! a $ e; d( e8 G: [$ m& m1 F void _sys_exit(int x); N) ^( t$ g$ u0 l0 F warning:#1-D last line of file ends without a& _- x; P1 U0 Z0 h; y+ q9 \+ N6 Z& s newline。这个警告是在告诉我们,在某个 C 文件的最后,没有输入新行,我们只需要双击这个; y' q4 O+ b, O5 p$ C( w 警告,跳转到警告处,然后在后面输入多一个空行就好了。 5 ~) o; ]4 f7 H* b SYSTEM文件夹* y8 _6 u1 x7 L, f o' f ; u. O6 O7 K2 {8 I3 b 1、delay6 q; q, o" ~) j2 \ 顾名思义:延时函数文件夹
1 [+ j7 k! a" e. j4 E6 L ***************SysTick定时器*****************着重理解( h" S* u, f" e: A6 O0 C0 e : N$ q" G T' Z, E3 Q7 Q RTOS会用到" w O1 g% R. H3 g& ]* k
sys文件夹 4 w# V. \% Z _) M% S/ L
0 ]( d5 f" C( c4 P5 L sys.c 和 sys.h 是由 ALIENTEK 提供,而其他 6 个文件,则都是拷贝自 STM32F4 的 CMSIS 库文件 8 I$ u5 P) ]0 `2 e sys.h 实现对 STM32F4 各个 IO 口的位操作,包括读入和输出 W! c! {# I5 ~4 X( f& \ PORTA的第七个 IO 口输出 1,则可以使用 PAout(6)=1;即可实现。我要判断 PORTA 的第 15 个位是否0 C v8 c* r0 l. ^1 \ 等于 1,则可以使用 if(PAin(14)==1)" H# T4 r1 F- L " A8 t; r& i: ~+ j5 y! Q
************************时钟配置************************************ usart 文件夹 3 t+ \3 d2 u, O P/ B) V R usart.c 和 usart.h 两个文件。这两个文件用于串口的初始化和中断接收$ \8 @# j1 v- L1 a7 P- d: H& G* v/ ` 3 A8 g3 s$ `' x usart.c里面包含了2个函数一个是void USART1_IRQHandler(void);另外一个是void uart_init(u32* O/ i( r, A( H4 T; T* w pclk2,u32 bound);里面还有一段对串口 printf 的支持代码,如果去掉,则会导致 printf 无法使# M0 p6 B/ Z+ }& H7 N8 N/ n 用 + V' h) W: L: e5 D$ r 在配置 STM32F4 外设的时候,任何时候都要先使能该外设的时钟!1 S$ }4 T4 ]* g3 L1 ^) B: R
RCC->AHB1ENR|=1<<5;//使能 PORTF 时钟 I/O 输出I 输入 # |+ l+ M; p/ \0 ]6 g 1、使能时钟 * f; b/ G, U0 j" v7 x 2、IO设置 void GPIO_Set(GPIO_TypeDef* GPIOx,u32 BITx,u32 MODE,u32 OTYPE,u32 OSPEED,u32 PUPD) ' C1 d9 n3 Z' Z! D //GPIO通用设置 G& {0 K( D4 _; q* I C K' j' j //GPIOx:GPIOA~GPIOI. //BITx:0X0000~0XFFFF,位设置,每个位代表一个IO,第0位代表Px0,第1位代表Px1,依次类推.比如0X0101,代表同时设置Px0和Px8. //MODE:0~3;模式选择,0,输入(系统复位默认状态);1,普通输出;2,复用功能;3,模拟输入.8 F% D! V- M! Y //OTYPE:0/1;输出类型选择,0,推挽输出;1,开漏输出.' G9 P. I1 W0 T6 W* y1 N7 u //OSPEED:0~3;输出速度设置,0,2Mhz;1,25Mhz;2,50Mhz;3,100Mh. - Z$ Y$ @- Q( G3 v/ D //PUPD:0~3:上下拉设置,0,不带上下拉;1,上拉;2,下拉;3,保留. //注意:在输入模式(普通输入/模拟输入)下,OTYPE和OSPEED参数无效!! / k/ s6 D& u& @9 D) J H 3、PFout(n) PFin(n)' V( [" [8 C n1 _5 m4 o. q7 s3 ~4 p$ _ / K. {3 k7 t( Y $ _/ n& A. e: W. v; R# } 串口 2 i# |/ u/ E% k# n$ x STM32F4 的串口使用起来还是蛮简单的,只要你开启了串口时钟,并设置相应 IO 口的模式,然后配置一下波特率,数据位长度,奇偶校验位等信息,就可以使用了,2 N4 A* g9 L( |2 c$ O) C uart_init(84,115200); //串口初始化为 115200" U) \2 J( }3 S. g: o 7 [/ j0 ?$ s. v# N( G" Z |
【福利三:雨露均沾·逢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 官方根治方案
微信公众号
手机版