STMCU小助手
发布时间:2022-5-24 10:06
|
学习新知识我的一个方法是:$ @- H4 H& ~/ V9 } . A+ A! Y" h( X+ K( j 1.先把握住新东西大的一个框架、涉及的内容、范围; 4 U1 L5 v$ f2 W- [ W- z# f2 V 简而言之:理清架构,把握重点; 2.在看清楚大的框架所涉及的知识时,再度量哪些是我所需要必须学习的(重点),哪些是现在不急着掌握的可以以后学习;7 _6 Z6 }- P" g# J {; q @ 8 F& m( V( h- S' i 简而言之:去我所需,为我所用;0 |3 D# F) D0 V. A1 S7 A7 _ 1 `, [4 [( q1 n% q. V 3.理论归理论,掌握理论知识的基础上,加以应用,能更深刻的理解这些知识点; 简而言之:实践出真知; ! S+ |) b0 N+ R/ S8 v 第一讲:& y( e' @9 t( |- y/ o# | 3 \9 k; W w* Z; z1 w# j5 t STM32是Cortex-M3系列之一,而Cortex-M3处理器采用的是ARMv7-M架构。 l& r- `" ^5 _: R' {7 C+ I ; G9 q0 k4 E! e7 k, h 系统架构:% B% j e1 C% z : _# i2 e9 y; x+ X* o
希望大家关注AHB总线,这是贯穿所有外设的一条总线,上图可知:AHB经过桥接,由APB1、APB2控制着几乎所有外设;; j' `4 M- b/ s8 A1 m1 M3 `' s 希望大家关注AHB总线,这是贯穿所有外设的一条总线,上图可知:AHB经过桥接,由APB1、APB2控制着几乎所有外设;* G9 i5 Q9 d3 R' m" n) W' u # C" g Q6 D5 E, B && APB2属于高速设备; (控制着如:ADC、GPIO、EXIT、TIM1等外设)9 _0 y- z: s1 a! y& b- \5 ~ && APB1属于低速设备; (控制着如:DAC、TIMx、USART、I2C等外设) 1 e [) K4 M7 N) e 固件库函数: STM32有两种软件开发方式:用库和不用库; % ?( _1 J+ O7 D) |1 k5 ^ 我们开讲一下用库开发:, K! _1 Y* N" I% ^; {, E6 S7 S* ^ & s" u: ?0 a0 X; K 固件库函数:该函数库是一个固件函数包,它由程序、数据结构和宏组成,包括了为控制器所有的外设性能特征。该函数还包括每个外设驱动描述和应用实例。/ {" k2 T j1 b9 C0 J 通过使用固件函数库,无需深入掌握细节,用户也可以轻松包括每一个外设。因此,固件库大大减少了用户编程的时间,降低开发成本;+ V8 K" X5 z7 a: W # y& t2 y& w: [, Q5 p* H9 h- k 每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能,每个器件的开发都由一个通用的API(application programming interface应用编程接口)驱动,API对该驱动程序的结构,函数和参数名称都进行了标准化; ) r" Y6 U+ H/ F$ i5 R. F; o5 Q; C: @7 w$ K 用库函数开发的优点: 1. 固件库大大减少了用户编程的时间,降低开发成本; 7 t h: E b/ x6 [' K, r 2.对初学者容易上手,无需深入掌握细节,也可以轻松包括每一个外设。 缺点:(1)没有深入系统架构,寄存器的控制的掌握和理解;* d& w4 o% H# d (2)编译效率低,速度慢;' h& X' V$ u C7 M7 x 6 n5 z h9 V: [3 M3 [ 不用库开发的优缺点:反之; ! a" G j3 v' i( R j 函数库一般放在FWlib目录下的inc文件夹内:如图+ N0 u, F. i, R/ ~0 t8 {. U
3 S n0 R {( U) u3 ?0 C 用库入门,用寄存器提高:+ A5 @1 F, U3 v: r# y7 X 下面是库文件的结构图:, M; B y+ i- ~2 \
1 Z$ T. l# B5 S& K 根据这张图课家里自己的工程;; N- G) O3 d5 h# r/ m1 X : e8 E( e3 A( N4 L6 A 应用层软件是依赖于第二层的定义和第三层相关库函数文件完成的;如果你不想用库,你可以利用stm32f10x.h中寄存器和结构体的定义直接对寄存器操作。而用库开发则是依靠第三层已经定义好的一些函数直接进行函数调用。下面将会解释几个关键头文件。 ( ?2 W4 q- E* Q$ l, y! B stmf10x.h : 定义了芯片类型及外设,并引入了另外三个头文件/ I: z9 B. l) ]* ]0 x# K' s # include “core_cm3.h” //arm公司为了标准化M3内核的一些声明& R5 H8 G3 x7 h2 L* y0 Y # include “system_stm32f10x.h” //系统时钟APB1、APB2时钟的一些外部声明 $ ?3 D2 y! }& D M0 q* ` 7 D' d8 W. J6 n* T # include <stdint.h> //编译器及内部参量类型定义 3 @% A6 n) O0 g; x* X& u / [7 r6 U8 S) m6 |$ G2 T8 I% B 上图中stm32f10x_it.c是专门存放中断函数的。- O! ^7 ]7 Z1 v9 n( n. g; o ) @0 D% C" A' @1 O: A& ` 在引入头文件过后,定义了一些变量类型,和外设相关的结构体、外设常量。 & Q1 o. x/ S, n 做好这些文件衔接的工程中还需要一个启动文件,虽然说开发时不需要你去了解,因为早已有人先写好了,但是希望有兴趣的可以去了解启动过程下是如何运作的。
2 b+ p9 K" w. H% j 一下按照对软件结构的理解,建立的一套工程模板。原因是如果使用库,那么建立工程时会很繁琐,如果有了一套适宜自己的模板,那么开发起来会很顺手。 7 w+ l9 {! u2 u
8 {3 w; ]& M/ N4 M4 u 另外需要知道的缩略词,如图:6 ^% M {" A1 m$ b. ] , z6 \/ r6 D7 I5 @6 Z, H( Z+ g9 {
( m9 }1 ?" q% s) @- N0 F3 r 希望自己理解建立一个工程模板;这样才是有所用,否则看这篇文章也是浪费时间; ) f1 g1 `5 I$ V. G7 F9 W 0 Y5 D4 @5 C- F* c: t N$ E |
想找个ST芯片
[GPIO] 使用新型抽象开始C++嵌入式编程,从GPIO开始
技术手册stm32f1xx中的一个小问题
【经验分享】STM32 HAL库移植FreeModbus详细步骤
【逢7发帖赢大礼】STM32开发之IC门禁卡UID读取方法!
实战经验 | Keil工程使用NEAI库的异常问题
经验分享 | FDCAN数据段波特率增加后发送失败的问题分析
STM32几种流行开发环境的优缺点
好用软件推荐-TouchGFX Designer
OpenSTLinux 6.1发布:M33-TD加持+安全升级,STM32MPU开发效率翻倍!
微信公众号
手机版