
主要内容: 1)常用C语言讲解; 2)寄存器地址名称映射解读。# ~8 [" K6 L# y1 M( }- m ) \7 X6 [8 g3 z0 g3 ] 1.常用C语言 1.1 位操作:6种位操作运算符. ~$ b/ f) p: c; ^ 1) 按位与:& 例:1011&0010=0010 2) 按位或:|8 ~) P! i1 Q% D4 d 例:1011|0010=1011 3) 按位异或:^ 例:1011^0010=1001 4) 取反:~ 例:~1011=0100 5) 左移:<< 例:0110<<1=1100/ Y/ R: l* y+ I* n 6) 右移:>>4 }. B1 R1 Z) H6 m0 M" a& S 例:0110>>1=0011 7) 组合:按位与后赋值:&= : I; N( Q2 k* G% p! j( T
1.2 define宏定义关键词9 d1 s8 p$ ]+ f* y# W5 n define是C语言中的预处理命令,用于宏定义,可提高源代码的可读性,为编程提供方便。 常见格式: #define 标识符 字符串 标识符为所定义的宏名。字符串可以是常数、表达式、格式串等。2 |) e1 ]$ I+ z7 i6 y, g6 k 例:
定义标识符SYSCLK_FREQ_72MHz的值为72000000。 1.3 ifdef条件编译 单片机程序开发过程中,经常会遇到一种情况,当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。条件编译命令最常见的形式为: #ifdef 标识符 程序段1 #else 程序段2& ^; a7 t" k: `8 d- r4 A #endif 例:
1.4 extern变量申明 C语言中extern可以置于变量或函数前,以表示变量或函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找定义。对于extern申明变量可以多次,但定义只有一次。) G6 Z2 `2 l2 j4 x1 r9 h7 C. C0 n( @ 4 D/ q) \! [/ \' W. Q, u% I 1.5 typedef类型别名 定义一种类型的别名,而不是简单的宏替换。可以用作同时声明指针型的多个对象。- c. K" |) k: B, }* H, @2 l typedef unsigned char uint8_t;7 b! D$ G1 t' K! |( D2 Q' | typedef unsigned short int uint16_t; typedef unsigned int uint32_t;7 N( P$ a0 x( ~" |0 F2 a typedef unsigned __int64 uint64_t;: B8 G2 f+ V6 A# v; R3 `3 c4 \! ~ 6 _, S! I) F2 N2 Z! o' H 1.6 结构体:构造类型 Struct结构体名{) O3 f+ k6 g9 I% h6 }9 m& S7 T 成员列表1;! w! m1 C9 l) q2 Y, K5 B 成员变量2;, `" m6 S! |: A: ]4 w 。。。* U% @# B- D- i' ], u, Z4 K" y: d }变量名列表; 在结构体申明的时候可以定义变量,也可以申明之后定义,方法是:2 f% l W, B/ S/ u Struct 结构体名字 结构体变量列表;/ g5 r+ Y$ m- v2 ?4 m4 f 作用:同一类型可以用数组,不同类型可以用结构体组织。; q9 \2 {/ D5 \: M! Z* a, @ 结构体可扩展性强。 例:) i$ [3 s. K2 o+ o$ G
1.7 static static申明的局部变量,存储在静态存储区。4 m( m5 Z5 ~) s& ^ 它在函数调用结束后,不会被释放,值会一直保留下来。 所以说static申明的局部变量,具有记忆功能。9 C H7 b. y) V4 F& _. y; B$ T: } 2. MDK中寄存器地址名称映射分析 概念:对MCU,一切底层配置,最终都是配置寄存器。 STM32中操作: GPIOA->ODR=0x00000000; 问题:值0x00000000是怎么赋值给GPIOA的ODR寄存器地址的?即GPIOA->ODR这种写法,是怎么与GPIOA的ODR寄存器地址映射起来的?理解了下面这张图就能明白。$ z0 U X0 }1 Z" f# {" T ![]() / b! m6 ~2 E# J+ \5 W2 T ———————————————— 版权声明:天亮继续睡/ v- A# |1 V- ?4 K. y" x! ^ |
OpenBLT移植到STM32F405开发板
为什么要先开启STM32外设时钟?
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
【经验分享】STM32实例-RTC实时时钟实验④-获取RTC时间函数与中断服务函数
STM32 以太网 MAC Loopback 的实现
STM32功能安全设计包,助力产品功能安全认证
基于STM32启动过程startup_xxxx.s文件经验分享
HRTIM 指南
ST 微控制器电磁兼容性 (EMC) 设计指南
适用于STM32微控制器的ΣΔ数字接口入门