
主要内容: 1)常用C语言讲解; 2)寄存器地址名称映射解读。 1.常用C语言 1.1 位操作:6种位操作运算符 1) 按位与:& 例:1011&0010=0010 2) 按位或:| 例:1011|0010=1011 3) 按位异或:^ 例:1011^0010=1001 4) 取反:~ 例:~1011=0100 5) 左移:<< 例:0110<<1=1100 6) 右移:>> 例:0110>>1=0011 7) 组合:按位与后赋值:&=
1.2 define宏定义关键词 define是C语言中的预处理命令,用于宏定义,可提高源代码的可读性,为编程提供方便。 常见格式: #define 标识符 字符串 标识符为所定义的宏名。字符串可以是常数、表达式、格式串等。 例:
定义标识符SYSCLK_FREQ_72MHz的值为72000000。 1.3 ifdef条件编译 单片机程序开发过程中,经常会遇到一种情况,当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。条件编译命令最常见的形式为: #ifdef 标识符 程序段1 #else 程序段2 #endif 例:
1.4 extern变量申明 C语言中extern可以置于变量或函数前,以表示变量或函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找定义。对于extern申明变量可以多次,但定义只有一次。 1.5 typedef类型别名 定义一种类型的别名,而不是简单的宏替换。可以用作同时声明指针型的多个对象。 typedef unsigned char uint8_t; typedef unsigned short int uint16_t; typedef unsigned int uint32_t; typedef unsigned __int64 uint64_t; 1.6 结构体:构造类型 Struct结构体名{ 成员列表1; 成员变量2; 。。。 }变量名列表; 在结构体申明的时候可以定义变量,也可以申明之后定义,方法是: Struct 结构体名字 结构体变量列表; 作用:同一类型可以用数组,不同类型可以用结构体组织。 结构体可扩展性强。 例:
1.7 static static申明的局部变量,存储在静态存储区。 它在函数调用结束后,不会被释放,值会一直保留下来。 所以说static申明的局部变量,具有记忆功能。 2. MDK中寄存器地址名称映射分析 概念:对MCU,一切底层配置,最终都是配置寄存器。 STM32中操作: GPIOA->ODR=0x00000000; 问题:值0x00000000是怎么赋值给GPIOA的ODR寄存器地址的?即GPIOA->ODR这种写法,是怎么与GPIOA的ODR寄存器地址映射起来的?理解了下面这张图就能明白。 ![]() ———————————————— 版权声明:天亮继续睡 |
STM32 GUI LTDC 最大像素时钟评估方法
【2025·STM32峰会】GUI解决方案实训分享1-对LVGL咖啡机例程的牛刀小试以及问题排查
OpenBLT移植到STM32F405开发板
为什么要先开启STM32外设时钟?
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
【经验分享】STM32实例-RTC实时时钟实验④-获取RTC时间函数与中断服务函数
STM32 以太网 MAC Loopback 的实现
STM32功能安全设计包,助力产品功能安全认证
基于STM32启动过程startup_xxxx.s文件经验分享
HRTIM 指南