学习内容:
点灯需要开GPIO外设时钟
1、配置系统时钟:在开启外设时钟之前,我们首先要配置好系统时钟SYSCLK, 为配置SYSCLK,要设置一系列的时钟来源、倍频、分频等控制参数。这些工作由SystemInit()库函数完成。这个函数的定义在system_stm32f10x.c文件之中。它的作用是设置系统时钟SYSCLK。函数的执行流程是先将与配置时钟相关的寄存器都复位为默认值,复位寄存器后,调用了另外一个函数SetSysClock(),定义如下:
从SetSysClock()代码可以知道,它是根据设置的条件编译宏来进行不同的时钟配置的。
在system_stm32f10x.c文件的开头,已经默认有如下的条件编译定义:
在第10行定义了SYSCLK_FREQ_72MHz条件编译的标识符,所以在SetSysClock()函数中将调用SetSysClockTo72()函数把芯片的系统时钟SYSCLK设置为72MHz,前提是输入的外部时钟源HSE的振荡频率要为8MHz。
2、外设时钟一般会在初始化外设的时候设置为开启(根据设计的产品功耗要求,也可以在使用的时候才打开) 。开启和关闭外设时钟也有封装好的库函数 RCC_APB2PeriphClockCmd()。
调用的时候需要向它输入两个参数,一个参数为将要控制的,挂载在
APB2总线上的外设时钟,第二个参数为选择要开启还是关闭该时钟。比如开GPIOC时钟,其设备挂载在APB2总线上。
如此便开启了外设时钟。开完时钟之后就要点灯了
注意:如果我们用到了I/O的引脚复用功能,还要开启其复用功能时钟。
如GPIOC的Pin4还可以作为ADC1的输入引脚,现在我们把它作为ADC1来使用**,除了开启GPIOC时钟外,还要开启ADC1的时钟**:
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE);
RCC_APB2PeriphClockCmd( RCC_APB2Periph_ADC1, ENABLE);
这里注意要开两个外设时钟。
3、选好引脚,配置了其功能及开启了相应的时钟,我们可以终于可以正式控制I/O口的电平高低了,从而实现控制LED灯的亮与灭。
还是调用库函数,用GPIO_SetBits()控制输出高电平,用GPIO_ResetBits()控制输出低电平。
输入参数有两个,第一个为将要控制的GPIO端口:GPIOA„„GPIOG,第二个为要控制的引脚号:Pin0~Pin15。
4、看如下LED.h文件定义
其中的反斜杠符号**“ ”叫做续行符**,用来连接上下行代码,表示下面一行代码属于“”所在的代码行,这在ST库经常出现。“”的语法要求极其严格,在它的后面不能有空格、注释等一切“杂物”。
5、写好了led.c、led.h两个文件,这是控制LED灯的驱动程序。
接下来,利用写好的驱动文件,在main文件中编写应用程序代码了。
后面还是声明了一个简单的延时函数,其定义在main文件的末尾。它是利用for循环实现的,用作短暂的,对精度要求不高的延时,延时的时间与输入的参数并无准确的计算公式,请不要深究。需要精准的延时的时候,我们会采用定时器来精确控制。
学习总结:
-----在芯片上电(复位)后,经过启动文件中SystemInit()函数配置好了时钟,就进入main函数了。接下来,从main函数开始分析代码的执行。
首先,调用了在led.c文件编写好的LED_GPIO_Config()函数,完成了对GPIOC的Pin口的初始化。紧接着就在while死循环里不断执行在led.h文件中编写的带参宏代码,并加上延时函数,使各盏LED轮流亮灭。当然,在LED控制的部分。
如果不习惯带参宏的方式,也可以直接使用GPIO_SetBits()和GPIO_ResetBits()函数实现对LED的控制。
上一篇:STM32单片机学习总结之------位操作
下一篇:STM32学习总结之时钟
推荐阅读最新更新时间:2024-11-08 22:33
设计资源 培训 开发板 精华推荐
- 利用MAX15046构建的高输入电压、大电流输出buck控制器参考设计
- DC1529A-B,用于 LTC2657BCUFD-H16 八路 I2C 16 位电压输出 DAC 的演示板,具有 2.048V 基准
- LTC1198 的典型应用 - 具有自动关断选项的 8 位、SO-8、1MSPS ADC
- 基于 MCF5232CVM100 MPU ColdFire MCF5xxx 处理器的 M5235EVB、M523xEVB 评估板
- NOIP1SN0480A-HEAD-BD-A-GEVK:PYTHON 480 成像板(单色)
- 使用 NXP Semiconductors 的 MC9S08DZ60CLH 的参考设计
- KIT9Z1J638EVM: 评估套件 - MM9Z1J638,带CAN/LIN的电池传感器
- DC2732A,LTC2949 电流、电压和演示板高压电池组的充电监控器
- LT1317CMS8 单节锂离子至 5V DC/DC 转换器的典型应用电路
- MCP1501-18E/SN 1.800V 负参考电压的典型应用电路