版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
CKS32F103微控制器教学课件05编程与调试C语言基础
·CKS32固件库
·调试工具实操嵌入式C和汇编语言。嵌入式开发中,可单独使用,也可以混合编程。一般C语言为主、汇编为辅,二者互补。源代码文件通常以.c、.h、.s为扩展名,如main.c、adc.s等。源代码采用人类可读的语法,便于理解和维护,但MCU只能执行其指令集对应的机器语言,因此源代码须经过编译、汇编、链接等步骤转换后才能运行C语言是嵌入式开发领域的王者语言,掌握其核心特性对于写出高效、可靠的代码至关重要。从C与汇编语言的对比开始,逐步深入其程序结构和核心语法。01
编程语言C语言(High-Level)•可读性强:接近自然语言,代码逻辑清晰,易于理解维护。•可移植性高:稍作修改即可在不同处理器架构上编译运行。•开发效率高:提供丰富的函数库和数据结构,显著缩短开发周期。•抽象层次高:屏蔽底层硬件细节,专注于业务逻辑实现。汇编语言(Low-Level)•执行效率极高:直接操作硬件,代码精简,运行速度达到极致。•硬件控制精确:支持位级操作,对寄存器、内存等硬件拥有绝对控制权。•可读性与移植性差:指令与硬件架构强绑定,代码晦涩难懂。•开发成本高:开发周期长,对开发者硬件功底要求高,易出错。综合应用策略:在现代嵌入式及系统开发中,通常采用“C语言为主,汇编为辅”的模式。主体逻辑与业务代码用C语言实现,以保证代码的可维护性与开发效率;仅在启动代码、中断服务函数、上下文切换、关键性能优化点等需要极致性能或直接硬件控制的场景使用汇编。00
编程语言-C语言与汇编语言比较
类别
语言嵌入式C语言C语言开发目标主要用于开发运行在资源受限的嵌入式系统上的程序如单片机、MCU等,目标是高效地控制硬件和实现实时性。通常用于开发桌面应用程序,运行在操作系统上,如Windows、Linux、macOS,目标是高性能、复杂功能的软件内存资源芯片自身的SRAM和Flash电脑的主存(RAM/硬盘)运行环境程序通常运行在没有操作系统的裸机或实时操作系统RTOS的小型设备上,需要直接操作硬件寄存器和外设。程序运行在有完整操作系统支持的环境中,可以依赖操作系统的库和服务。硬件依赖强烈依赖硬件,代码需要直接操作I/O端口、定时器、中断和外设寄存器等一般和硬件无直接交互,主要通过操作系统提供的API间接控制硬件。开发工具需要专门的工具链,如Keil、IAR、STM32CubeIDE、AVR-GCC等。还包括硬件调试工具,如JTAG、SWD常用的开发工具有GCC、Clang等通用编译器和IDE,如VisualStudio、VSCode等编译与链接编译生成的程序是直接运行在目标硬件上的二进制文件,如.hex或.bin文件编译生成的程序是运行在通用操作系统上的可执行文件,如.exe或LinuxELF语言扩展经常使用硬件相关的语言扩展,如关键字volatile、register等,以及硬件平台的头文件,如cs32F10x.h等通常使用标准C语言特性,较少涉及硬件相关扩展实时性程序必须满足实时性要求,如中断处理、定时任务调度等通常不需要严格的实时性调试方式调试多通过硬件仿真器,如ST-Link、J-Link直接调试目标硬件,甚至需要逻辑分析仪和示波器协助调试工具如GDB,运行时可以通过控制台和操作系统调试工具调试/*1.头文件(包含硬件寄存器、库函数声明)*/#include"cs32f10x.h"//对应的芯片头文件#include<stdint.h>//标准整型定义#include<stdbool.h>//布尔类型支持/*2.宏定义和全局变量*/#defineLED_PIN(1<<5)//定义LED位#defineKEY_PIN(1<<0)//PA0对应的位(用户按键)uint8_tcounter=0;//全局变量/*3.硬件初始化函数*/voidLED_Init(void){RCC->APB2ENR|=RCC_APB2ENR_IOPCEN;//使能GPIOC时钟GPIOC->CRH&=~(0xF<<20);//清除配置GPIOC->CRH|=(0x1<<20);//配置为推挽输出}/*硬件初始化函数:按键外部中断初始化(PA0->EXTI0)*/voidKEY_EXTI_Init(void){//略}程序例程/*4.外部中断服务函数(ISR)*/voidEXTI0_IRQHandler(void){if(EXTI->PR&KEY_PIN)//检测是否是PA0中断{EXTI->PR=KEY_PIN;//清除中断挂起位
led_state=!led_state;//切换状态if(led_state)GPIOC->ODR&=~LED_PIN;//低电平亮灯elseGPIOC->ODR|=LED_PIN;//高电平灭灯}}/*5.主函数(main)*/intmain(void){
LED_Init();//初始化硬件while(1)//主循环(死循环){GPIOC->ODR^=LED_PIN;//翻转LEDfor(volatileuint32_ti=0;i<100000;i++);//延时}}程序例程预处理指令以`#`开头,如#include。编译前由预处理器处理,用于引入头文件、定义宏等。全局声明定义全局变量和函数原型,其作用域通常贯穿整个程序的生命周期。主函数(main)程序的唯一入口点,系统从`intmain()`开始执行代码逻辑。函数定义封装具体功能的代码块。一个程序可以包含多个自定义函数,实现代码的模块化和复用。语句与表达式程序的核心执行体。由变量操作、逻辑判断、循环控制等基本指令构成,共同完成计算和业务操作。01
C语言编程-C程序结构预处理命令是在编译之前对源代码进行处理的指令,均以符号#开头,是C/C++代码中实现灵活性与可维护性的重要工具。01
C语言编程-预处理命令预处理命令是C语言的一大特色,它让代码更具灵活性和可维护性。最常用的就是#include,用来引入头文件。#define用来定义宏,可以是常量也可以是函数。此外,条件编译指令如#ifdef,可以帮助我们编写更通用的代码,适应不同的编译环境01
C语言编程-预处理命令#include引入头文件•<stdio.h>:引入系统标准库头文件。
•"myheader.h":引入自定义的本地头文件。#define定义宏•定义常量:如#definePI3.14159
•定义宏函数:如MAX(a,b)((a)>(b)?a:b),用于代码复用。01
C语言编程-基本数据类型分类类型内存占用(byte)取值范围典型应用无符号整数uint8_t10~2558位传感器数据,如温湿度值、GPIO引脚状态(0/1)uint16_t20~6553516位ADC/DAC采样值、SPI/I²C通信数据帧uint32_t40~429496729532位外设寄存器,FLASH地址等uint64_t80~18446744073709551615高精度时间戳、大尺寸数据存储(较少用,占内存大)有符号整数int8_t1-128~1278位有符号数据(如误差值、偏移量)int16_t2-32768~3276716位有符号,如加速度、角速度传感器数值int32_t4-2147483648~214748364732位有符号运算,如坐标计算、温度补偿等浮点类型float4±3.4×10³⁸(精度6~7位)浮点运算,如比例系数、温度转换double8±1.7×10³⁰⁸(精度15~17位)高精度浮点计算,少用•整型:也可以用char、int、short、long等结合signed有
符号和unsigned无符号修饰。不指定signed/unsigned时默认为signed有符号类型浮点型:float,double(用于存储小数);使用double类型时要注意平台对浮点数支持的程度,特别是在资源受限的系统中,可能需要考虑性能和存储的优化•布尔型Bool,需引入<stdbool.h>头文件01
C语言编程-基本数据类型上表中的数据类型在stdint.h
头文件中定义,所以使用时需要用#include<stdint.h>引入
01
C语言编程-关键字关键字:是编译器预先定义并保留的、具有特定语法意义的单词。关键字用于定义程序的语法结构、数据类型、控制逻辑及特殊功能,是编译器解析和理解代码的基础。在嵌入式C中,大部分关键字与标准C语言相同,但volatile、interrupt、register、static等在嵌入式场景中尤为重要,直接影响硬件寄存器访问、内存控制以及编译器优化策略。常用的嵌入式C语言关键字包括数据类型关键字、类型限定符和修饰符关键字、函数关键字、中断与硬件相关关键字、控制语句类以及运算符与逻辑相关关键字。数据类型关键字Typedef,
struct,enum01
C语言编程-关键字Typedef:用于为已有的数据类型定义一个别名,从而提高代码的可读性和可移植性。typedefunsignedcharu8;/*无符号8位变量**/0~255一字节typedefvolatileunsignedcharvu8;/*易变的8位无符号变量**/typedefunsignedcharconstuc8;/*只读的8位无符号变量*/typedefsignedcharconstsc8;/*只读的8位有符号变量*/Struct:
结构体是一种复合数据类型,可以将不同类型的变量组合在一起,形成一个集合,用于描述某一对象的完整属性。方式1:struct结构体名
{成员列表};方式2:typedefstruct
{成员列表}结构体名;结构体定义typedefstruct{uint32_tPin;/*需要配置的GPIO管脚*/uint32_tMode;/*GPIO的操作模式*/uint32_tPull;/*GPIO的上拉或者下拉模式*/uint32_tSpeed;/*GPIO的速度*/uint32_tAlternate;/*GPIO的引脚复用*/}GPIO_InitTypeDef;该结构体的实例化:GPIO_InitTypeDefGPIO_Init;//创建结构体对象,名称为GPIO_InitGPIO_Init.Pin=GPIO_PIN_9;//PA9GPIO_Init.Mode=GPIO_MODE_AF_PP;//复用推挽输出GPIO_Ini.Pull=GPIO_PULLUP;//上拉GPIO_Init.Speed=GPIO_SPEED_FREQ_HIGH;//高速GPIO_Ini.Alternate=GPIO_AF7_USART1;//复用为USART101
C语言编程-关键字Enum:枚举关键字用于定义枚举类型,为一组相关的常量定义一个名称,使代码更具可读性。枚举通常用于需要一组整数值的场景,而这些整数值有明确的意义和范围,如状态机、错误码、通信协议指令等。如GPIO速度定义如下:typedefenum{GPIO_Speed_10MHz=1,GPIO_Speed_2MHz,GPIO_Speed_50MHz}GPIOSpeed_TypeDef;嵌入式编程中,应避免使用枚举定义过大的整数范围,以减少内存开销,尤其是在资源受限的系统中01
C语言编程-关键字类型限定符和修饰符关键字序号关键字名称功能描述
const常量,声明不可修改的变量或指针、只读的变量,不允许再次赋值。
void声明函数无返回值或无参数,声明无类型指针
volatile不允许编译器优化,表示变量的值可能会在程序外部被改变
static声明静态变量
extern声明外部变量
auto分配的内存都是可读可写的区域
register限制变量定义在寄存器上,访问快速
restrict一种指针优化声明,告知编译器该指针是唯一指向某内存区域的引用,避免指针之间的冲突,指示指针在特定作用域内不会与其他指针重叠。01
C语言编程-关键字类型限定符和修饰符关键字Const:用于修饰变量、数组、指针或函数形参,表示该对象在程序运行过程中不可被修改或二次赋值,提高代码的安全性与可读性.const常见应用:硬件寄存器或外设访问时定义,如将GPIO配置为输入时,用const修饰对应参数,表示引脚只读;定义只读数据,如用const定义查找表、字符串常量、配置参数等不可修改的数据,防止其在运行时被更改;定义函数参数,如在函数形参中使用const,可避免函数体内意外修改传入的数据,提高接口的健壮性和可读性。#include<stdio.h>#include"cs32f10x.h"//假设使用cks32库//查找表(只读)constintsin_table[4]={0,707,1000,707};//配置参数(只读)constintbaud_rate=9600;//函数参数保护(只读字符串)01
C语言编程-关键字类型限定符和修饰符关键字,Const//GPIO输入读取(只读访问寄存器)intread_gpio(constGPIO_TypeDef*GPIOx,uint16_tpin){return(GPIOx->IDR&pin)?1:0;}intmain(void){//使用查找表和配置参数printf("Baud=%d,sin(90°)=%d\n",baud_rate,sin_table[2]);//打印只读字符串print_msg("SystemInitOK");//假设读取GPIO输入intkey_state=read_gpio(GPIOA,GPIO_Pin_0);printf("Key=%d\n",key_state);return0;}01
C语言编程-关键字类型限定符和修饰符关键字Void:表示无类型,声明无返回值的函数或无参数、无类型的指针。void不能用来声明变量或常量。嵌入式系统中一般将指针定义为void类型,如void*ptr,以便在需要指针指向不同类型数据时灵活复用voidsetOutput(boola);//函数无返回值intmain(void){ inti=10; charC='A'; floatf=12.34; doubled=56.78;
void*p;//声明无类型指针 p=&i; //整数变量的地址赋给指针 printf("valueofi:%d\r\n",*(int*)p);p=&C; //字符变量的地址赋给指针 printf("valueofC:%d\r\n",*(char*)p); p=&f; //单精度变量的地址赋给指针 printf("valueoff:%d\r\n",*(float*)p); p=&d; //双精度变量的地址赋给指针 printf("valueofd:%d\r\n",*(double*)p);return0;}01
C语言编程-关键字类型限定符和修饰符关键字:Void程序运行结果:Valueofi:10ValueofC:AValueoff:12.340000Valueofd:56.780000在C语言中,指针的声明形式灵活。但*仅作用于紧随其后的变量名,建议写代码时采用void*ptr书写方式,统一将星号靠近变量名,以提升代码的可读性与一致性void*ptr;ptr=(int*)0x2FFA;*ptr=0xAA55;01
C语言编程-关键字类型限定符和修饰符关键字Volatile:是一种类型修饰符,告诉编译器该变量的值可能在程序的正常执行流程之外发生变化,例如被硬件寄存器、中断服务程序或其他线程修改。没有volatile修饰的变量在编译器优化时,可能将其值缓存在CPU寄存器中,后续直接使用缓存,而不再访问真实地址。用volatile修饰的变量,则要求编译器每次都从内存或外设寄存器的真实地址读取,禁止使用寄存器副本,从而避免优化带来的风险。如GPIO、USART、ADC等外设状态寄存器的值会随硬件状态经常改变,中断服务程序访问的全局变量如标志位、计数器等,多任务/多线程的共享变量等,都必须用volatile修饰若某个引脚用于检测锅炉水位限位状态,需要实时反馈,使用volatile修饰后,每次循环都会重新读取引脚状态,确保水位变化能够被正确检测。锅炉水位检测代码:01
C语言编程-关键字//水位状态标志,使用volatile保证每次访问都从寄存器/内存读取volatileuint8_twaterLevel;//启动GPIOB时钟(假设RCC_APB2ENR对应GPIOB)RCC->APB2ENR|=(1<<3);//时钟开启//配置PB0为输入浮空GPIOB->CRL&=~(0xF<<0);//清除PB0配置位GPIOB->CRL|=(0x4<<0);//输入浮空模式//主程序while(1){//读取PB0电平,1表示水位到达限位,0表示未到waterLevel=(GPIOB->IDR&0x01);if(waterLevel){//水位到达,停止锅炉stopBoiler();}}定义为volatile的变量不会被编译器优化。01
C语言编程-关键字类型限定符和修饰符关键字Static:用于声明静态变量或静态函数,控制变量或函数的生命周期和作用域静态变量分为函数内部的静态变量和函数外的静态变量两类。函数内静态变量的生命周期贯穿整个程序运行期间,但作用域仅限于函数内部。在函数被调用过程中初始化指令只执行一次,多次调用时不会重复初始化。#include<stdio.h>voidfunc(){
staticintx=10;//在对func的三次调用中,x只进行一次初始化 printf("%d\n",x);//输出x的值 x=x+1;}intmain(intargc,char*constargv[]){ func();//输出10 func();//输出11 func();//输出12
return0;}01
C语言编程-关键字类型限定符和修饰符关键字函数关键字:Return和inlineReturn用于终止当前函数的执行,并将控制权交还给调用者。如果函数有返回值类型则return后必须带上相应的值,如果函数返回类型为void,则return仅表示结束函数执行Inline为内联函数,提示编译器将函数在调用处直接展开,以减少函数调用开销。适用于小型函数,在嵌入式开发中,通常会将一些GPIO位操作函数或寄存器读写函数声明为staticinline,放在头文件中,既能保证高效,又能避免函数调用开销。inline是一种以空间换时间的做法,内联展开后速度快,但会增加代码体积。在Flash容量有限的MCU中,需平衡使用。代码很长或者有循环/递归的函数不适宜作为内联函数,编译器自动优化时会忽略掉相应的内联。01
C语言编程-关键字控制流关键字序号关键字名称功能描述
if条件判断语句,用于执行条件测试
else与if配合使用,指定条件不成立时的执行代码块
switch多重选择语句,用于在多个可能的条件之间选择一个
caseswitch语句中的具体选项
defaultswitch语句中的默认选项,当没有匹配的case时执行
while用于执行循环语句,直到条件不满足时退出
dodo-while循环语句的起始部分,用于确保循环至少执行一次
for标准的for循环语句,适用于已知循环次数的情况
continue跳过本次循环的剩余部分,继续执行下一次循环
break终止当前循环,跳出循环体
goto跳转到程序中指定的标签位置,但使用时要小心,避免破坏程序结构01
C语言编程-关键字控制流关键字序号关键字名称功能描述
if条件判断语句,用于执行条件测试
else与if配合使用,指定条件不成立时的执行代码块
switch多重选择语句,用于在多个可能的条件之间选择一个
caseswitch语句中的具体选项
defaultswitch语句中的默认选项,当没有匹配的case时执行
while用于执行循环语句,直到条件不满足时退出
dodo-while循环语句的起始部分,用于确保循环至少执行一次
for标准的for循环语句,适用于已知循环次数的情况
continue跳过本次循环的剩余部分,继续执行下一次循环
break终止当前循环,跳出循环体
goto跳转到程序中指定的标签位置,但使用时要小心,避免破坏程序结构01C语言编程-函数函数:是完成特定功能的代码模块,是C语言的基本组成,每个C程序至少包含一个main()函数。函数将一组相关语句封装在一起,实现特定任务或操作,具有独立性、参数传递、返回值、封装性和调用性等特点。函数的基本结构:返回值类型函数名(参数列表)//函数声明{//函数体:局部变量声明
类型变量名;...//函数体:语句序列,完成特定功能
语句;...return表达式;//返回值(若返回类型为void,可省略)}01C语言编程-函数函数:是完成特定功能的代码模块,是C语言的基本组成,每个C程序至少包含一个main()函数。函数将一组相关语句封装在一起,实现特定任务或操作,具有独立性、参数传递、返回值、封装性和调用性等特点。函数的基本结构:返回值类型函数名(参数列表)//函数声明{//函数体:局部变量声明
类型变量名;...//函数体:语句序列,完成特定功能
语句;...return表达式;//返回值(若返回类型为void,可省略)}01
编程语言-关键字uint_8led_on(uint_8pin); //函数原型声明
voidGPIO_SetPinHigh(void); //函数原型声明voidGPIO_SetPinHigh(void)//函数声明,无参数,无返回值{ //假设GPIOx_BSRR是某MCU的端口置位寄存器GPIOA->BSRR=(1<<5);//将PA5置为高电平}uint_8led_on(uint_8pin)//函数名led_on,输入参数为引脚号,返回值为整型。{//设置引脚为输出GPIO_SetBits(GPIOC,pin);return0;}01C语言编程-函数函数调用:函数调用必须在函数原型声明之后。被调用的函数称为被调函数,调用该函数的函数为主调函数,main函数就是一个典型的主调函数。没有函数原型声明的函数只能被位于该函数后面的函数调用,所以一般在程序的开始对所有被调函数进行原型声明#include"cs32f10x.h"intLED_GPIO_Config(void);{ //GPIO时钟和引脚配置初始化,略 GPIO_SetBits(LED1_GPIO_PORT,LED1_GPIO_PIN);/*点亮led1灯*/
ReturnLED1_GPIO_PIN; }intmain(void){ intLed1State;//局部变量声明;
Led1State=LED_GPIO_Config();
while(1);}02CKS32固件库CKS32固件库是程序开发的得力助手。简单来说,就是把操作硬件寄存器的复杂过程,封装成了一个个简单的函数。比如要点亮一个LED,不需要去查手册找对应的寄存器地址和位,只需要调用一个GPIO初始化函数即可。这极大地简化了开发,提高了效率和代码的可靠性。屏蔽底层硬件差异,统一API接口,让开发者专注于业务逻辑,而非寄存器配置。什么是固件库?固件库是由芯片厂商提供的、对底层硬件寄存器操作进行封装的函数集合。固件库将复杂的硬件操作抽象为简单的API函数,让开发者无需深入了解寄存器细节,即可快速配置和使用GPIO、UART等片上外设。CKS32F103C8T6微控制器简化开发流程提供GPIO、SPI等标准外设驱动,即拿即用。显著提升效率避免重复造轮子,专注业务逻辑开发。官方保障稳定性经过严格测试验证,比自研驱动更可靠。标准化易于维护统一API接口规范,降低团队协作成本。快速上手使用只需包含头文件(如cs32f10x_gpio.h),并直接调用库函数(如GPIO_Init())即可轻松控制硬件。02CKS32固件库优点:CKS32固件库采用CMSIS标准。CMSIS由ARM公司推出,是一套用于简化MCU软件开发的标准化接口。CMSIS位于硬件层与操作系统或用户应用层之间,提供与芯片厂商无关的硬件抽象层,为外设接口和RTOS实时操作系统提供统一的处理器软件接口,屏蔽底层硬件差异,从而提高代码的可移植性和复用性▍Cortex-M3内核核心特性哈佛架构总线分离,并行访问效率高三级流水线取指/译码/执行,指令提速Thumb-2指令集16/32位结合,密度效率兼顾NVIC中断控制支持嵌套中断与动态优先级▍CMSIS软件接口标准📌定义:ARM联合芯片厂商制定的标准,旨在屏蔽硬件差异,大幅提升嵌入式软件的跨平台可移植性。核心层次Core(内核通用)+Device(厂商外设)核心价值统一接口规范,支持代码复用,HAL库构建基础02CKS32固件库-CMSIS软件接口标准CMSIS软件层次详解用户层UserLayer架构最顶层,承载开发者编写的应用代码,直接面向具体的业务逻辑与功能实现,与底层硬件解耦。CMSIS应用程序的基本结构,包括用户应用层、操作系统层、CMSIS层和硬件寄存器层。CMSIS层位于系统程序结构的中间位置,向下负责直接访问内核和各类外设硬件,向上为用户程序或操作系统提供标准化函数接口CMSIS核心标准层(中间枢纽)MCU硬件基础层架构最底层,包含Cortex内核、NVIC中断控制器、SysTick定时器及各类片上外设,是软件运行的物理基础。通过这三层结构,CMSIS为内核和外设寄存器提供了标准化的访问方法,并统一了异常向量名称,提供了独立于具体设备的接口。CMSIS建立了Cortex-MMCU的编程标准,既保证了互操作性和可移植性,又使芯片厂商能够专注于外设差异化设计,从而降低开发成本并提升软件复用性02CKS32固件库-固件库的命名规则源程序和头文件命名源程序和头文件命名统一以cs32f10x_为前缀。如cs32f10x_adc.h为ADC模块头文件,cs32f10x_gpio.h为GPIO模块头文件,cs32f10x_conf.h为配置文件常量命名规则所有常量均使用大写英文字母命名。单个源文件使用的常量定义在对应的.c文件中,多个文件共享的常量定义在对应的.h头文件中。如#defineGPIO_MODE_INPUT0x00000000GPIO_MODE_INPUT是常量名,表示GPIO的输入模式,数值0x00000000为该模式对应的参数值。寄存器命名规则寄存器或寄存器字段通常作为常量处理,命名规则和常量一样使用大写英文字母,并采用缩写以直观反映功能。如GPIO_Mode_IPU表示将GPIO口配置为输入模式并启用上拉电阻,IPU=InputPull-Up,清晰说明寄存器配置的具体含义02CKS32固件库-固件库的命名规则源程序和头文件命名源程序和头文件命名统一以cs32f10x_为前缀。如cs32f10x_adc.h为ADC模块头文件,cs32f10x_gpio.h为GPIO模块头文件,cs32f10x_conf.h为配置文件常量命名规则所有常量均使用大写英文字母命名。单个源文件使用的常量定义在对应的.c文件中,多个文件共享的常量定义在对应的.h头文件中。如#defineGPIO_MODE_INPUT0x00000000GPIO_MODE_INPUT是常量名,表示GPIO的输入模式,数值0x00000000为该模式对应的参数值。寄存器命名规则寄存器或寄存器字段通常作为常量处理,命名规则和常量一样使用大写英文字母,并采用缩写以直观反映功能。如GPIO_Mode_IPU
表示将GPIO口配置为输入模式并启用上拉电阻,IPU=InputPull-Up,清晰说明寄存器配置的具体含义02CKS32固件库-固件库的命名规则外设函数命名规则名称功能
PPP_Init根据PPP_InitTypeDef中指定的参数初始化外设PPP,例如TIM_Init,ADC_Init
PPP_DeInit复位外设PPP的所有寄存器至缺省值,例如TIM_DeInit.
PPP_Cmd使能或者失能外设PPP,例如:SPI_Cmd
PPP_ITConfig使能或者失能来自外设PPP的某中断源,如:RCC_ITConfig。以字符串Config结尾的函数为配置外设功能的函数,例如GPIO_PinRemapConfig
PPP_DMAConfig使能或者失能外设PPP的DMA接口,例如:TIM1_DMAConfig
PPP_GetFlagStatus检查外设PPP某标志位被设置与否,例如:I2C_GetFlagStatus
PPP_ClearFlag清除外设PPP标志位,例如:I2C_ClearFlag
PPP_GetITStatus判断来自外设PPP的中断发生与否,例如:I2C_GetITStatus
PPP_ClearITPendingBit清除外设PPP中断待处理标志位,例如:I2C_ClearITPendingBit以外设缩写开头,每个单词首字母大写,函数名中只允许存在一个下划线,用于分隔外设缩写和函数其他部分。03用户程序生成MCU可执行程序的流程
MCU只能执行二进制机器码即机器语言用C语言编写的用户程序必须经过预处理、编译、汇编、链接和格式转换,生成最终在芯片中运行的机器码,然后通过专用工具下载到MCU中,MCU才能执行程序指令。汇编语言编写的代码只需经过汇编、链接、格式转换和下载等即可运行。01预处理(Preprocessing)•处理所有以#开头的指令,如展开头文件、替换宏定义。
•输出:生成.i
后缀的预处理文件。02编译(Compile)•对预处理后的代码进行词法/语法分析,翻译为特定架构的汇编指令。
•输出:生成.s后缀的汇编代码文件03汇编(Assembly)•将人类可读的汇编代码,转换为机器能识别的二进制机器指令。
•输出:生成.o后缀的二进制目标文件(ObjectFile)。04链接(Linking)•由链接器把多个.o文件和库文件等合并。
•输出:生成.elf或.axf05格式转换
•用工具objcopy从.elf文件中剥离调试信息,提取纯指令/数据
•输出:最终转为可烧录的.hex/.bin文件。03用户程序生成MCU可执行程序的流程
预处理:由预处理器对源代码进行文本替换、文件合并、条件编译等操作,最终生成纯净的扩展名为.i的C源文件编译:由编译器将.i文件翻译成扩展名为.s的汇编语言。汇编:由汇编器把.s文件转换成扩展名为.o的目标文件,文件里面是MCU能识别的二进制机器码指令链接:由链接器把多个.o文件和库文件等合并,按照链接脚本分配代码、变量在Flash和SRAM中的位置,生成扩展名为.elf的可执行映像文件。格式转换:用工具objcopy从.elf文件中剥离调试信息,提取纯指令/数据,把.elf转成扩展名为.bin或.hex的二进制文件。KeiluVision
是专为ARM系列微控制器设计的集成开发与调试环境(IDE),功能强大且易于上手。▌核心调试功能单步执行(Step)逐行执行代码,细致观察程序流程断点(Breakpoint)代码行暂停运行,检查变量状态观察/堆栈窗口实时查看变量、寄存器值及函数调用外设与性能分析图形化配置外设,定位性能瓶颈04开发环境搭建-KeiluVision
调试环境04开发环境搭建-KeiluVision
调试环境功能类别具体功能集成开发环境(IDE)μVisionIDE,集编辑、编译、调试一体化,具有项目管理、多配置支持、代码高亮、自动补全、模板与芯片向导、版本控制等功能编译工具链ArmCompiler(AC6)、支持C/C++与ARM汇编、优化选项、宏定义与条件编译、内置CMSIS标准调试功能单步、断点、变量监视等源代码级调试、指令级调试、内存/寄存器实时查看、硬件调试器支持J-Link、ULINK、CMSIS-DAP等、具有性能分析工具芯片支持与外设配置数千种MCU的设备数据库、CMSIS-Pack外设驱动与例程、外设配置向导仿真与测试软件仿真器、事件记录、支持RTX、FreeRTOS等RTOS调试代码分析与优化静态代码分析、代码覆盖率检测、执行时间分析下载与部署内置Flash烧录工具、JTAG、SWD、串口等多种下载方式04开发环境搭建-KeiluVision
调试环境KeilMDK安装和注册01安装•keil官网/mdk5下载MDKv502添加器件库安装包注册以管理员身份运行KeilMDK软件和注册机。在KeilMDK中,点击“File”->“LicenseManagement”获取CID0304开发环境搭建-KeiluVision
调试环境CKS32F103调试环境配置01Device选项--选择芯片02Target选项-MCU目标系统配置04开发环境搭建-KeiluVision
调试环境CKS32F103调试环境配置03Output选项――输出设置04Debug选项――调试器配置选择调试器04开发环境搭建-KeiluVision
调试环境CKS32F103调试环境配置05Utilities选项――编程工具04Debug选项――调试器配置调试接口和速度选择04开发环境搭建-KeiluVision
调试环境CKS32F103调试环境配置06Utilities选项―编程工具芯片下载方式Utilities选项―编程工具芯片信息图形化配置工具STM32CubeMX是ST公司推出的一款强大的图形化配置工具,同样完美兼容国产CKS32系列芯片,是嵌入式开发的必备利器。CubeMX是一个图形化工具,在上面像画图一样配置芯片的引脚功能、时钟树和各种外设。配置完成后,它能自动为我们生成项目的初始化代码。这大大降低了开发门槛,让我们能更快地进入业务逻辑的实现“如果固件库是武器,CubeMX
就是智能管理系统”将复杂的底层配置转化为可视化操作,让嵌入式开发流程更现代化、更高效。04开发环境搭建-STM32CubeMX工具✨芯片与时钟配置•直观检索并选定目标MCU型号
•图形化构建系统时钟树,自动计算分频系数🛠️外设与代码生成•拖拽式配置
GPIO、UART、定时器等外设功能
•一键生成标准化初始化代码,支持Keil/IAR/VSCode降低门槛无需死记寄存器,图形化操作轻松上手。减少错误自动生成标准代码,规避底层配置错误。提升效率快速搭建项目框架,聚焦应用层开发。04开发环境搭建-STM32CubeMX工具▍工具简介ST官方推出的免费集成开发环境(IDE),基于Eclipse框架深度定制,无缝整合了STM32CubeMX图形化配置工具,实现了“配置-生成-编码-调试”的一站式开发。▍核心功能特性图形化配置:引脚/时钟/外设可视化自动代码生成:HAL/LL库工程框架开发编译:集成GCC与智能编辑器硬件调试:ST-Link/J-Link全支持▍标准新建工程流程01下载安装:获取官方安装包02新建项目:File>New>Project03选型配置:选择芯片与参数04生成代码:进入IDE开始编程工欲善其事,必先利其器。CKS32CubeIDE最大的特点是整合了图形化配置工具CKS32CubeMX。可以通过简单的鼠标点击来配置芯片的各种参数,然后自动生成项目框架和初始化代码。这极大地简化了开发流程,使用户更快地进入应用逻辑的编写。新建工程的流程也非常直观,只需选择芯片、配置参数、生成代码这几步即可。高效开发利器告别繁琐的底层寄存器配置,通过CubeMX图形化界面即可完成90%的初始化工作,专注上层应用逻辑开发。04开发环境搭建-STM32CubeIDE05Keil中仿真调试仿真调试:指的是在调试过程中选择使用Keil提供的仿真器来模拟目标硬件,而不需要实际的物理硬件设备。仿真器调试通常用于程序开发和测试时,确保代码在硬件上运行之前的正确性。keil主菜单中选择Debug,Debug选项展开如图所示,选项中有运行、单步、断点等调试选项,可根据调试情况选择,一般是在某个关键位置设断点进行调试。选择Start/StopDebugSession启动调试,程序运行后Peripherals菜单下的选项会由空白状态变为出现许多可点击的选项
•05Keil中仿真调试使用仿真调试功能时一定要注意设断点或单步运行。当程序停在断点或单步停顿时,才可手动修改寄存器值,以测试程序对不同寄存器状态的响应,同时可以通过寄存器窗口、内存窗口或外设视图查看各寄存器的当前值、中断标志位、定时器计数值、GPIO输入输出状态等。•06程序调试和下载:J-Link与ST-Link下载器是连接电脑和目标芯片的关键桥梁,承担程序下载、硬件断点调试与性能分析的核心任务,是嵌入式开发的必备工具。J-Link(SEGGER)-专业级标杆•性能强悍:极速下载与调试响应,支持RTT高带宽实时终端输出。
•生态完备:兼容ARM全系内核,拥有最丰富的Flash烧写算法支持。ST-Link(STMicro)-高性价比首选•极致适配:专为ST/CKS32芯片设计,开发板标配,即插即用。
•成本优势:价格亲民,功能足以覆盖绝大多数基础开发与调试需求。选型建议:初学者或仅开发CKS或者ST系列芯片,ST-Link完全够用且经济;若需跨平台开发、追求毫秒级调试响应或复杂项目开发
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 珍爱生命严防溺水-初一学生防溺水安全教育课件
- 加油站员工职业发展指南
- 上海人工智能公司盘点
- 转正职业发展规划陈述
- 2026年科普知识进农村活动方案设计
- cvt技术就业前景
- AI在会计事务中的应用
- 运输企业安全管理绩效评估制度
- 公关服务公司公关物料使用与核销管理制度
- 2026北京高考作文真题全新深度解读及高分范文
- 2026年辽宁锦州海通实业有限公司计划招录28人笔试模拟试题及答案详解
- 2026年度湖北省部分工程高、中级职称水平能力测试(电气)综合练习题及答案
- Q∕320612 QJH001-2023 QJH热固复合聚苯乙烯泡沫保温板外墙外保温系统应用技术规程
- 2026年中国文联所属事业单位招聘(19人)考试参考试题及答案解析
- 2026年高职老年人能力评估师(评估实操)试题及答案
- 口服抗栓药物相关消化道损伤防治专家共识解读总结2026
- 人教版小升初语文试卷及答案【完整】
- DB11-T 383-2023 建筑工程施工现场安全资料管理规程
- 2026年及未来5年市场数据中国妥尔油脂肪酸行业市场竞争格局及发展趋势预测报告
- 20kV及以下配电网工程预算定额(2022版)全5册excel版
- 《公务员录用体检操作手册(试行)》
评论
0/150
提交评论