首先说一下编程过程中几个过程吧
榜首,挑选一门言语,C言语或汇编言语,嵌入式编程一般现在盛行仍是C,这个需求根底与时刻
第二读懂了解 MCU的寄存器各寄存器的功用,尤其是一些IO口设置,各模块时钟设置比方定时器,I2C,同步异步串口,PWM等等,曾经的话51的话没有这样设置。而现在MCU基本上各模块时钟都分开了。这个能够看官方数据阐明书就能够了。
其实程的意图便是设置一系列寄存器.并依据你规划程序流程去履行它,期间或许加入了你规划好的一些算法,和数学公式。进行核算,或履行。
第三,你有一块你的试验板就如这次STM32推的F429,你还需求下载程序的编程器。便是把编译器编译好的代码下载到你的方针试验板上,不过ST推的大都试验班都是自带USB串口的程序下载器。比方STM32F429就自带了
第四,你还需求了解的是编译器,编译器的数据类型一些界说,及有些编译器的或许自带内建函数,这个不有必要了解。不然无法编程。
本文主要就介绍STM32的数据类型的根底知识。以及一些关键词的含义。
▲在KELI MDK数据类型中进了如下界说
char占用1个字节
short int占用2字节
int占用4字节
long占用4字节
long int占用4字节
float占用4字节
double占用8字节
即有如下宏界说
typedef unsigned char uint8; // 无符号8位字符型变量
typedef signed char int8; // 有符号8位字符型变量
typedef unsigned short uint16; // 无符号16位短整型变量
typedef signed short int16; // 有符号16位短整型变量
typedef unsigned int uint32; // 无符号32位整型变量
typedef signed int int32; // 有符号32位整型变量
typedef float fp32; // 单精度浮点数(32位长度)
typedef double fp64; // 双精度浮点数(64位长度)
注:C言语中的品种数据:整型:int short long 实型:float, double 。
其间,Unsigned 为无符号, signed 有符号。
▲STM32的数据类型的宏界说
STM32采用了很多的固件库,其间在2.0库中有24个数据类型如下
typedef unsigned char u8;0~255一字节
typedef signed char s8;-128~127
typedef volaTIle unsigned char vu8;
typedef volaTIle signed char vs8;
typedef unsigned char const uc8;
typedef signed char const sc8;
typedef volaTIle unsigned char const vuc8;
typedef volaTIle signed char const vsc8;
typedef unsigned short u16; 0~65535两字节
typedef signed short s16; -32768~32767两字节
typedef volatile unsigned short vu16;
typedef volatile signed short vs16;
typedef unsigned short const uc16;
typedef signed short const sc16;
typedef signed short const sc16;
typedef volatile unsigned short const vuc16;
typedef volatile signed short const vsc16;
typedef unsigned long u32; 0~(2^32-1)四字节
typedef signed long s32;
typedef signed long const sc32;
typedef volatile unsigned long const vuc32;
typedef volatile signed long const vsc32;
对部分数据类型后边作了注释,其它类型类推。
▲ 关于两个关键词阐明 volatile& const
(1)volatile :这个关键字,很多人只知道用,不知道其含义,有介绍解说是不易被编译器优
化的。在STM32材料中解说加了易挥发的变量。这些解说都是含糊不清的。
为此笔者专门查了下这个润饰关键字含义
浅显的解说: 随时会改动,并被多函数调用能够加volatile润饰。
简称易变变量或易挥发变量。
表明这个变量的真的很容易变。
进阶解说: 加了这个volatile含义便是在每次取这个变量值的时分,要求不是取它前次在某个 时分取的暂时缓存变量(比方说暂存在某个寄存器中),而是直接到内存中取。
个人经历: 告知编译器,volatile界说的变量有必要RAM变量.不能是寄存器变量.
尤其是中止顶用 全局变量一定要加volatile。
(2)const: 在界说变量时分,假如加上关键词const,则变量的值在程序运转期间不能改动,当然不能再赋值了。这种变量称为常变量(constant variable)或是只读变量(read-only-variable,这样觉得更恰当)。
▲ STM32F10x_StdPeriph_Driver 3.0今后的版别中运用了CMSIS数据类型
3.0今后版别与之前版别变量的界说有所不同,可是出于兼容旧版别的意图,以上的数据类型依然兼容。CMSIS的IO类型限定词如表 3所示,CMSIS和STM32固件库的数据类型比照方表 5所示。这些数据类型能够在
STM32F10x_StdPeriph_Lib_V3.4.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x
\stm32f10x.h中找到详细的界说。
▲ 数据类型和IO类型限定词Cortex-Mx HAL运用规范ANSI C头文件界说的规范类型。特别用类型限定词IO来访问外设的变量。
表3 数据类型限定词IO。
▲ ST从库包中移除了文件”stm32f10x_type.h”,新的库运用CMSIS和界说的数据类型。
表5展现了STM32F10xxx和之间数据类型的一一对应联系。表5 STM32F10xxx固件库V2.0.3与CMSIS数据类型比照