教你用STM32一步一步点亮led灯
stc32g的例程

stc32g的例程STC32G是一款基于ARM Cortex-M3内核的32位单片机。
以下是一个简单的STC32G例程,用于点亮一个LED灯:#include "stc32g.h" // 包含STC32G头文件void delay(uint32_t count) // 延时函数{while (count--);}int main(){GPIO_InitTypeDef GPIO_InitStructure; // 定义GPIO初始化结构体RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 使能GPIOA时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // 设置引脚为GPIOA的第0个引脚GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_P P; // 设置引脚模式为推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MH z; // 设置引脚速度为50MHzGPIO_Init(GPIOA, &GPIO_InitStructure); // 初始化GPI OAwhile (1) // 无限循环{GPIO_SetBits(GPIOA, GPIO_Pin_0); // 设置GPIOA的第0个引脚为高电平,点亮LED灯delay(1000000); // 延时1秒GPIO_ResetBits(GPIOA, GPIO_Pin_0); // 设置GPIOA的第0个引脚为低电平,熄灭LED灯delay(1000000); // 延时1秒}}这个例程首先包含了STC32G的头文件,然后定义了一个延时函数`delay`,用于控制LED灯的闪烁间隔。
在`main`函数中,我们配置了GPIOA的第0个引脚作为推挽输出,并设置了引脚速度为50MHz。
stm32cudeibe开发案例

stm32cudeibe开发案例本文将介绍一些基于STM32CubeIDE的开发案例。
STM32CubeIDE 是STMicroelectronics公司推出的一款全新的综合性开发环境,用于开发基于STM32微控制器的嵌入式应用程序。
这些案例将涵盖从简单的LED闪烁到复杂的通信协议的开发。
本文旨在帮助初学者和有经验的开发者更好地了解STM32CubeIDE的使用方法和开发流程。
案例1: LED闪烁本案例将演示如何在STM32CubeIDE中使用GPIO(通用I/O)来控制板载LED的闪烁。
我们将使用STM32F4 Discovery开发板进行演示。
案例2: ADC采集本案例将演示如何使用STM32CubeIDE中的ADC(模拟/数字转换器)来采集外部模拟信号。
我们将使用STM32F4 Discovery开发板和电位器进行演示。
案例3: PWM输出本案例将演示如何在STM32CubeIDE中使用定时器和PWM(脉冲宽度调制)来控制外部设备的输出。
我们将使用STM32F4 Discovery开发板和舵机进行演示。
案例4: USART通信本案例将演示如何在STM32CubeIDE中使用USART(通用同步/异步串行接口)来实现串口通信。
我们将使用两个STM32F4 Discovery开发板进行演示,一个作为发送器,另一个作为接收器。
案例5: SPI通信本案例将演示如何在STM32CubeIDE中使用SPI(串行外设接口)来实现SPI通信。
我们将使用两个STM32F4 Discovery开发板进行演示,一个作为主设备,另一个作为从设备。
案例6: I2C通信本案例将演示如何在STM32CubeIDE中使用I2C(串行外设接口)来实现I2C通信。
我们将使用两个STM32F4 Discovery开发板进行演示,一个作为主设备,另一个作为从设备。
以上这些案例只是基于STM32CubeIDE的开发案例之一,希望能对您的嵌入式开发学习和实践有所帮助。
STM32 LL 库使用指南说明书

STM32 LL库使用指南---By Fengzi熟悉STM32的都知道ST官方提供了非常方便好用的库函数供用户使用,多数人都使用过STM32标准外设库,STM32Cube库(即HAL库),这个LL库是什么鬼,却从来没听说过。
好吧,我承认这个名字是我自己XJB取的。
目录一、初识LL 库 (1)二、怎么使用LL库 (3)三、新建STM32LL库工程模板 (5)四、第一个程序——点亮LED (8)五、添加其他程序功能 (10)………………………………………………………………………………………………………………………………………………….一、初识LL 库最近论坛发的STM32L476RG Nucleo开发板到手了,准备学习玩耍,当然第一步就是下载资料,于是我下载STM32L4Cube 1.1.0版本,打开逐个查看,好像和以前一样的,没什么特别嘛,于是准备开始开发。
等等,好像还真发现了有点不一样:熟悉HAL库的都知道,该库的文件几乎都是以stm32xxx_hal_xxx.h/.c命名的,为了和以前的标准库有个区分,上图中那些是什么鬼前辈说,遇到问题赶紧查手册,于是我果断打开STM32L4Cube库的说明手册(UM1884):原来这个东西叫做Low Layer APIs,作为英文渣渣表示实在不习惯洋里洋气的高大上名字,于是擅自把他叫做【STM32LL库】了(不服的你咬我啊)。
从这里看好像是说这个东东比HAL库更接近硬件,到底什么鬼,还不清楚。
但是以前好像没见过这个东西啊,就算是STM32L4Cube的1.0.0版本中都没有。
看看Cube发行历史:原来LL库是在1.1.0版本才加上的,大概意思就是:1.LL APIs是寄存器级的编程,嗯,也就是说我们常说的直接操作寄存器吧。
2.LL APIs适用于xxx等一大堆外设3.LL APIs函数全部定义为static inline函数,放在对应的头文件中,用户使用需要包含相关头文件4.参考这两个文档看看LL库文件在Cube库中的位置,有20多个文件,全部以stm32l4xx_ll_xxx.h命名:STM32Cube_FW_L4_V1.1.0\Drivers\STM32L4xx_HAL_Driver\IncSTM32L4是面向低功耗市场的,同时不失高性能,功耗和性能往往是两个矛盾的东西,ST在硬件设计上想了各种办法来实现兼顾低功耗高性能(例如各种低功耗模式,LP外设等),而在软件层面,程序也讲求效率,LL库全是直接操作寄存器,直接操作寄存器往往效率较高,而且函数定义为内联函数,调用函数时不是堆栈调用,而是直接把函数的代码嵌入到调用的地方,利于提高代码相率,我想这也是ST在STM32L4系列中推出这个直接操作寄存器的LL库的原因之一吧。
基于stm32灯光自动调节,实验结果及分析

基于stm32灯光自动调节,实验结果及分析在当今智能化时代,灯光自动调节系统在我们的日常生活中越来越普及。
本文将围绕基于STM32的灯光自动调节系统进行实验,展示其实验结果并进行分析。
一、实验原理及设备基于STM32的灯光自动调节系统采用光传感器和温度传感器采集环境光和温度信息,通过算法处理,自动调节灯光亮度及色温,以达到最佳的舒适度。
实验中使用的设备包括STM32开发板、光传感器、温度传感器、LED灯等。
二、实验过程实验过程中,我们首先通过STM32开发板读取光传感器和温度传感器采集的环境信息。
然后,根据事先设定的算法,将读取的数据转化为灯光亮度和色温的控制信号。
最后,将控制信号传递给LED灯,实现灯光的自动调节。
实验过程中需要注意以下几点:1.确保硬件设备的连接正确无误,包括传感器与开发板的连接、LED灯的控制信号线等。
2.确保软件的正常运行,包括数据采集、算法处理和灯光控制等。
3.考虑到环境变化可能对灯光调节产生影响,需要预设一定的调节范围和调节时间间隔。
三、实验结果及分析在实验过程中,我们观察了灯光自动调节系统的实际效果。
以下为实验结果及分析:1.灯光亮度及色温的调节范围:实验结果显示,灯光自动调节系统的亮度及色温调节范围均在预期范围内,满足实际使用需求。
2.灯光亮度及色温的准确性:通过对比预设的参考值,实验结果显示灯光亮度及色温的调节准确性较高,尤其是在环境光变化较为平稳时,能够迅速达到预设值。
3.系统的稳定性:实验过程中,灯光自动调节系统在长时间运行后仍能保持稳定性能,未出现明显的调节误差或异常现象。
4.系统的实时性:在环境光变化较快的情况下,系统能够迅速响应并作出相应的调节动作,满足实时性的要求。
综上所述,基于STM32的灯光自动调节系统在实验中表现出良好的性能和稳定性。
其实验结果表明,该系统能够在不同环境下实现灯光的自动调节,提高人们的舒适度。
四、应用前景及改进方向基于STM32的灯光自动调节系统具有广泛的应用前景,尤其在智能家居、办公室、学习空间等领域具有巨大的潜力。
STM32入门教程

前言一天入门STM32,仅一天的时间,是否有真的这么快。
不同的人对入门的理解不一样,这篇一天入门STM32的教程,我们先对入门达成一个共识,如果你有异议,一天入门不了,请不要较真,不要骂街,保持一个工程师该有的修养,默默潜心学习,因为你还有很大的上升空间。
我眼中的入门:(前提是你学过51单片机和C语言)1、知道参考官方的什么资料来学习,而不是陷入一大堆资料中无从下手。
2、知道如何参考官方的手册和官方的代码来独立写自己的程序,而不是一味的看到人家写的代码就觉得人家很牛逼。
3、消除对STM32的恐惧,消除对库开发的恐惧,学习是一个快乐而富有成就感的过程。
第1章一天入门STM32本章参考资料:《STM32中文参考手册》《CM3权威指南CnR2》学习本章时,配合《STM32中文参考手册》GPIO章节一起阅读,效果会更佳,特别是涉及到寄存器说明的部分。
1.151与STM32简介51是嵌入式学习中一款入门级的精典MCU,因其结构简单,易于教学,且可以通过串口编程而不需要额外的仿真器,所以在教学时被大量采用,至今很多大学在嵌入式教学中用的还是51。
51诞生于70年代,属于传统的8位单片机,如今,久经岁月的洗礼,既有其辉煌又有其不足。
现在的市场产品竞争激烈,对成本极其敏感,相应地对MCU的要求也更苛刻:功能更多,功耗更低,易用界面和多任务。
面对这些要求,51现有的资源就显得得抓襟见肘了。
所以无论是高校教学还是市场需求,都急需一款新的MCU来为这个领域注入新的活力。
基于这市场的需求,ARM公司推出了其全新的基于ARMv7架构的32位Cortex-M3微控制器内核。
紧随其后,ST(意法半导体)公司就推出了基于Cortex-M3内核的MCU—STM32。
STM32凭借其产品线的多样化、极高的性价比、简单易用的库开发方式,迅速在众多Cortex-M3MCU中脱颖而出,成为最闪亮的一颗新星。
STM32一上市就迅速占领了中低端MCU市场,受到了市场和工程师的无比青睐,颇有星火燎原之势。
stm32单片机设计实现呼吸灯效果知识应用

我们来探讨一下“STM32单片机设计实现呼吸灯效果”这一主题。
呼吸灯效果是指LED灯逐渐由暗到亮再由亮到暗的渐变效果,仿佛在呼吸一样,因此得名“呼吸灯”。
在嵌入式系统和物联网设备中,呼吸灯是一种常见的人机交互界面,其设计实现涉及到PWM调光技术和定时器中断控制等内容。
在STM32单片机中,实现呼吸灯效果最常用的方法是利用定时器和PWM模块。
我们需要配置定时器的计数周期和预分频系数,以确定呼吸灯的周期和频率。
利用PWM模块控制LED的亮度,根据呼吸灯的状态变化不断更新PWM占空比,从而实现呼吸灯的效果。
在具体的程序设计中,我们可以使用STM32提供的HAL库函数或者直接操作寄存器的方法来实现呼吸灯效果。
在HAL库函数的调用中,需要先初始化定时器和PWM模块,然后在定时器中断中更新PWM的占空比,从而实现呼吸灯效果。
而如果选择直接操作寄存器的方法,需要对寄存器进行设置和操作,相对更加灵活和高效。
除了硬件设计和软件编程,实现呼吸灯效果还需要考虑功耗和灯光效果的优化。
在实际应用中,我们可以通过调节呼吸灯的周期和频率,以及优化PWM输出的方式来达到节能和良好的视觉效果。
还可以考虑使用多个LED灯和不同颜色的混合,设计出更加丰富多彩的呼吸灯效果。
STM32单片机设计实现呼吸灯效果是一个涉及硬件设计和软件编程的综合应用,需要结合定时器、PWM模块和中断控制等知识,并注重功耗和灯光效果的优化。
通过深入理解和实践,我们可以设计出满足用户需求的呼吸灯效果,为嵌入式系统和物联网设备增添更加灵动的人机交互界面。
我的个人观点是,在实际应用中,呼吸灯效果是一种简洁而又美观的人机交互设计,能够为产品增添更加智能和生动的氛围。
掌握STM32单片机设计实现呼吸灯效果的知识和应用技巧对于嵌入式系统工程师和物联网设备开发者来说是非常重要的。
希望通过本文的介绍,读者能对这一主题有更加全面、深刻和灵活的理解。
我们来探讨一下“STM32单片机设计实现呼吸灯效果”这一主题。
STM32 LED流水灯实验报告

中断接收。这里只是针对串口 1,比如你要用串口 2 或者其他的串口,只要对代码稍 修改就可以了。usart.c 里面包含了 2 个函数一个是 void USART1_IRQHandler(void); 另 外一个是 void uart_init(u32 bound);里面还有一段对串口 printf 的支持代码,如果去掉, 则会导致 printf 无法使用, 虽然软件编译不会报错, 但是硬件上 STM32 是无法启动的, 这段代码不要去修改
LED1=1; delay_ms(1000); delay_ms(1000); LED0=1; LED1=0; delay_ms(1000); delay_ms(1000); LED0=1; LED1=1; delay_ms(1000);//ÑÓʱ300ms delay_ms(1000); } } /* LED0=0; LED_a=0; LED1=1; LED_a=1; delay_ms(5000); LED0=1; LED0_a=1; LED1=0; LED1_a=0; delay_ms(5000);
姓名:楚昕 1. 图
班级:轨道 1502 班
学号:201523050224
2. 实验目的 通过 delay 函数的应用实现流水灯的控制 3. 代码 #include "led.h" #include "delay.h" #include "sys.h" u8 a,LED1_a,LED0_a; void delay(u16 a) { u16 i,j; for(i=0;i<a;i++) {for(j=0;j<1000;j++); } } int main(void) { delay_init(); LED_Init(); delay_init(); SysTick->LOAD=90000; SysTick->CTRL =SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk ; while(1) { LED0=0; LED1=1; delay_ms(1000); delay_ms(1000); LED0=1;
基于STM32的LCD操作

基于STM32的LCD操作STM32的LCD操作是通过使用外部的液晶显示器(Liquid Crystal Display,简称LCD)模块来实现的。
以下是一个基于STM32的LCD操作的详细解释,包括液晶显示器的初始化、数据和命令的发送、以及常用的LCD操作函数。
LCD初始化:1.首先,配置GPIO引脚用于连接到LCD模块的数据线和控制线。
3.然后,发送各种初始化命令,如清除显示、设置光标等。
数据和命令的发送:1.向LCD发送数据(字符或图形数据)时,需要确保LCD处于数据接收状态,而不是指令接收状态。
通常需要在发送数据之前发送一个命令来设置LCD的模式为数据接收模式。
2.通过配置GPIO引脚的电平来发送数据或命令。
常用的LCD操作函数:1. `lcd_init(`: 初始化LCD模块。
2. `lcd_cmd(uint8_t cmd)`: 向LCD发送一个命令。
3. `lcd_data(uint8_t data)`: 向LCD发送一个数据。
4. `lcd_clear(`: 清除LCD显示内容。
5. `lcd_set_cursor(uint8_t row, uint8_t col)`: 设置LCD显示的光标位置。
6. `lcd_print(char *str)`: 在LCD上打印一个字符串。
7. `lcd_create_custom_char(uint8_t location, uint8_t *data)`: 创建自定义字符。
8. `lcd_display_on(`: 打开LCD显示。
9. `lcd_display_off(`: 关闭LCD显示。
上述函数只是基本的示例,具体的函数实现会因不同的液晶模块而有所不同。
在编写代码时,需要根据液晶模块的规格和数据手册来设置相应的GPIO引脚和参数。
总之,基于STM32的LCD操作涉及到GPIO引脚的配置、LCD控制器的初始化、发送数据和命令等步骤。
通过熟悉液晶模块的规格和使用相关的库函数,可以实现对LCD模块的控制。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
STM32之一步一步点亮led (2011-05-09 19:40)标签: stm32led MDK 入门分类:stm32入手stm32以来,一直想快速上手,所以在各大论坛闲逛,各个达人的blog 上学习,正所谓欲速则不达,心急是吃不了热豆腐的!有木有最终决定使用st官网的库开发,据大侠们写道使用库可以快速上手,貌似的确如此,一个个教程写的那么好,直接拿过来用就是了。
可是那么多个库,聪明的你请告诉到底选择哪一个啊My God!实话实说,我被这些库折腾了个够!好吧,我最后还是承认最后用的是的库,是很方便!切入正题,点亮LED。
硬件:红牛开发板,STM32F103ZET6(144封装).软件:RealView MDKstm32固件库:附上自己整理后的库:根据官网库自己整理了下,新建了工程模板如下图:(主要参考文章《在Keil MDK+环境下使用STM32 库.pdf》)在KeilMDK+环境下使用库.pdf入图所示:新建一个目录01_ProLed,建议放在英文路径下,避免不必要的麻烦。
将上面的库解压到此目录,再新建一个project目录,存放工程。
说明:CMSIS:最底层接口。
StartUp:系统启动文件。
StdPeriph_Lib:stm32外围设备驱动文件。
Project:工程文件。
User:用户文件。
新建工程步骤:此处略去300字。
简单说明:该文件是内核访问层的源文件和头文件,查看其中的代码多半是使用汇编语言编写的。
在线不甚了解。
--摘自《在Keil MDK+环境下使用STM32 库》该文件是外设访问层的头文件,该文件是最重要的头文件之一。
就像51里面的一样。
例如定义了 CPU是哪种容量的 CPU,中断向量等等。
除了这些该头文件还定义了和外设寄存器相关的结构体,例如:1.typedef struct2.{3.__IO uint32_t CR;4.__IO uint32_t CFGR;5.__IO uint32_t CIR;6.__IO uint32_t APB2RSTR;7.__IO uint32_t APB1RSTR;8.__IO uint32_t AHBENR;9.__IO uint32_t APB2ENR;10.__IO uint32_t APB1ENR;11.__IO uint32_t BDCR;12.__IO uint32_t CSR;13.14.#ifdef STM32F10X_CL15.__IO uint32_t AHBRSTR;16.__IO uint32_t CFGR2;17.#endif /* STM32F10X_CL */18.19.#if defined (STM32F10X_LD_VL)|| defined (STM32F10X_MD_VL)||defined (STM32F10X_HD_VL)20.uint32_t RESERVED0;21.__IO uint32_t CFGR2;22.#endif /*STM32F10X_LD_VL ||STM32F10X_MD_VL ||STM32F10X_HD_VL */23.} RCC_TypeDef;包含了那么多寄存器的定义,那么在应用文件中(例如自己编写的 main 源文件)只需要包含即可,而不是以前固件库的需要包含这个头文件。
--摘自《在Keil MDK+环境下使用STM32 库》该头文件也可以称为外设访问层的头文件和源文件。
在该文件中可以定义系统的时钟频率,定义低速时钟总线和高速时钟总线的频率,其中最关键的函数就是 SystemInit()了,这个后面会详细介绍。
总之这两个文件是新固件库的重点,有了它粮也大大简化了使用 stm32的初始化工作。
--摘自《在Keil MDK+环境下使用STM32 库》这个文件和 V2 版本的库的内容是一样的,需要使用哪些外设就取消哪些外设的注释。
例如需要使用 GPIO功能,但不使用 SPI功能,就可以这样操作。
--摘自《在Keil MDK+环境下使用STM32 库》1.#include""2./*#include""*/这个文件就不用多说了,自己编写。
--摘自《在Keil MDK+环境下使用STM32 库》这两个文件包含了 stm32中断函数,在源文件和头文件中并没有把所有的中断入口函数都写出来,而只写了 ARM内核的几个异常中断,其他的中断函数需要用户自己编写。
--摘自《在Keil MDK+环境下使用STM32 库》OK,开始写代码了。
由于的库在启动的时候已经设置好时钟了(将在后面有讲述),所以我们只需设置好对应的GPIO即可。
查看硬件连接:来点亮PF6.新建与,添加到User Code下面。
1.#ifndef _LED_H_2.#define _LED_H_3.4.void Delay(uint32_t times);5.void LedInit(void);6.7.#endif1.#include ""2.3./************************************************************************4.5.*函数名:LedInit(void)6.7.*描述:8.9.*输入:无10.11.*输出:无12.13.*返回:无14.15.************************************************************************/16.17.void LedInit(void)18.{19.GPIO_InitTypeDef GPIO_InitStructure;20.21./*初始化 GPIOF的 Pin_6为推挽输出*/22.=GPIO_Pin_6;23.=GPIO_Mode_Out_PP;24.=GPIO_Speed_50MHz;25.GPIO_Init(GPIOF,&GPIO_InitStructure);26.27.}28.29./************************************************************************30.31.*函数名:Delay(uint32_t times)32.33.*描述:延时函数34.35.*输入:uint32_t times36.37.*输出:无38.39.*返回:无40.41.************************************************************************/42.void Delay(uint32_t times)43.{44.while(times--)46. uint32_t i;47.for(i=0; i<0xffff; i++)48.;49.}50.}在中加入led初始化与点亮关闭即可。
1./*!< At this stage the microcontroller clock setting is alreadyconfigured,2.this is done through SystemInit()function which iscalled from startup3.file before to branch to application main.4.To reconfigure the default setting of SystemInit()function, refer to5. file6.*/7.8./* Add your application code here9.*/10.11./*初始化 GPIOF时钟*/12.RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,ENABLE);13.14.LedInit();15.16./* Infinite loop*/17.while(1)19./*关闭 LED1*/20.GPIO_SetBits(GPIOF,GPIO_Pin_6);21./*延时*/22.Delay(50);23./*点亮 LED1*/24.GPIO_ResetBits(GPIOF,GPIO_Pin_6);25./*延时*/26.Delay(50);27.}认真学习下这段代码,其实也非常简单,参考自《在Keil MDK+环境下使用STM32 库》。
我想请大家注意的是前面的一段英文注释,这段英文注释什么意思呢。
“在运行 main 函数之前,系统时钟已经完成初始化工作,在main函数之前,通过调用启动代码运行了 SystemInit函数,而这个函数位于”。
根据文中的提示我们回到看看 SystemInit如何初始化系统的。
在的开头便定义了系统的时钟频率,从下面的这段代码可以看出系统的频率被定义为 72MHZ,这也是绝大多数 STM32运行时的频率。
1.#if defined (STM32F10X_LD_VL)||(defined STM32F10X_MD_VL)||(defined STM32F10X_HD_VL)2./* #define SYSCLK_FREQ_HSE HSE_VALUE */3.#define SYSCLK_FREQ_24MHz4.#else5./* #define SYSCLK_FREQ_HSE HSE_VALUE */6./* #define SYSCLK_FREQ_24MHz */7./* #define SYSCLK_FREQ_36MHz */8./* #define SYSCLK_FREQ_48MHz */9./* #define SYSCLK_FREQ_56MHz */10.#define SYSCLK_FREQ_72MHz11.#endif紧接着根据这个宏定义程序试图把系统时钟初始化为 72MHz,代码有点冗长,这里就不一一列出。
在SystemInit 函数中,调用了 SetSysClock 函数,如果设定时钟的频率为 72MHZ 则 SetSysCloc 调用SetSysClockTo72函数,该函数和 V2 版本固件库中的各范例中的RCC_Configuration很相似,主要完成把外部时钟 9 倍频后分配给系统时钟,APB1 时钟和 APB2又由系统时钟分频获得。
关键代码如下:1./* HCLK = SYSCLK */2.RCC->CFGR |=(uint32_t)RCC_CFGR_HPRE_DIV1;3.4./* PCLK2 = HCLK */5.RCC->CFGR |=(uint32_t)RCC_CFGR_PPRE2_DIV1;6.7./* PCLK1 = HCLK */8.RCC->CFGR |=(uint32_t)RCC_CFGR_PPRE1_DIV2;从上面的分析可以看出,SystemInit 并不需要用户调用,启动代码会自动执行,这样相当于少了一个 RCC_Configuration 函数的绝大多数内容。