STM学习总结之点灯

发布者:数字梦行最新更新时间:2022-10-25 来源: csdn关键字:STM  学习总结  点灯 手机看文章 扫描二维码
随时随地手机看文章

学习内容:

点灯需要开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的控制。

关键字:STM  学习总结  点灯 引用地址:STM学习总结之点灯

上一篇:STM32单片机学习总结之------位操作
下一篇:STM32学习总结之时钟

推荐阅读最新更新时间:2024-11-08 22:33

STM32移植lwip之硬件连接
一直以来都想写一些帖子和博客,但对于刚毕业迷茫的我就是狠不下心来,一番准备之后,决定把前几天学习的一些东西写下来,作为一个记录的开始。 前段日子接触了关于lwip在stm32上面的移植,建立tcp服务器与tcp客户端,以及搭建最简单的web服务器等,我打算分开来一篇篇条理性地记录下来。 stm32建立tcp的硬件基础 每次博客的记录我都想有个目标,以便以后翻阅都能带个目标性地去看。 本篇目标:能够了解stm32的数据是怎么通过网卡和端口连接到PC机的,是建立在哪些硬件基础上的呢? 硬件电路包括: stm32f407zg(MAC) smsc lan9303(PHY) hr681680(网络隔离变压器) rj45(水晶接头
[单片机]
STM32之一步一步点亮led
入手stm32以来,一直想快速上手,所以在各大论坛闲逛,各个达人的blog上学习,正所谓欲速则不达,心急是吃不了热豆腐的!有木有? 最终决定使用st官网的库开发,据大侠们写道使用库可以快速上手,貌似的确如此,一个个教程写的那么好,直接拿过来用就是了。可是那么多个库,聪明的你请告诉到底选择哪一个啊?My God!实话实说,我被这些库折腾了个够!好吧,我最后还是承认最后用的是v3.4的库,是很方便! 切入正题,点亮LED。 硬件:红牛开发板,STM32F103ZET6(144封装). 软件: RealView MDK 4.12 stm32固件库:v3.4 附上自己整理后的库: V3.4_clean.rar 根据官网库自己整理
[单片机]
<font color='red'>STM</font>32之一步一步点亮led
STM32F103两种串口输出的方式 学习笔记
#include stm32f10x.h #include stm32f10x_rcc.h #include stm32f10x_gpio.h #include stm32f10x_usart.h #include stm32f10x_crc.h #include system_stm32f10x.h #include stdio.h void UART_PutChar(USART_TypeDef* USARTx, uint8_t Data) { USART_SendData(USARTx, Data); while(USART_GetFlagStatus(USARTx, USA
[单片机]
ucos ii 移植到STM32f103ze上
简介:在移植UCOS时,需要编写的函数文件有includes.h、os_cpu.c、os_cpu_a.asm、os_cpu.h、需要配置的文件有os_cgf.h、中断和启动代码。 采用别人移植好的代码。即所需函数已写好。 准备工作: 1、ucos ii源码 2、stm32库 步骤: 1、建工程。 工程目录为: 2、配置ucos ii 在os_cfg.h中配置相关功能 3、修改相关函数 ucos ii需要一个定时器,在stm32中采用systick定时器,因此需要配置systick定时器 void SysTick_Configuration(void) { //关计数
[单片机]
ucos ii 移植到<font color='red'>STM</font>32f103ze上
如何解决STM32调试无法进入main函数的问题?
昨天调试STM32程序,以前使用的是MDK3.40的版本,把版本升了下级,升到了MDK4.10,装好后,一运行,哈哈,新版本给人的感觉就是不一样啊,很爽,较之前有很多改进,把自己以前的程序打开,编译运行发现程序调试时无法进入Main函数,弄了很久,很是郁闷啊,最后还是在ourdev的坛子里,找到了同样问题的解决方法,多谢ourdev,以下是坛子里面的帖子,我把他贴出来了. sdc666 : 请问高手,我在调试我的STM32F101c8t6时,遇到一个问题,因为我要调试串口,我在main.c中添加了#include,编译可以通过,但是当我用jlink硬件调试时,一开始就停在了 0x08001460 BEAB BKPT 0xAB
[单片机]
STM32学习之串口的使用
串口的使用 1、为什么要用串口? 自上一篇写的时间是1月20号,今6月7号了,半年没更新了。 这半年发生了什么?过完年就去找公司实习,在那里自我感觉进步很大。其实在公司大多都是自学,师傅基本不会给你说什么。但这并不能说明你的师傅对你不好,带我的那个师傅只比我高一届,但他的水平比我高的好多届。他也是自学,也没人告诉他该怎么做,因为老板也不太懂。所以自学能力很重要,当然有人带你的话,这样会更好。 不说这些了,串口在调试的时候作用非常大。也学我们在学51的时候,只是将程序下载到开发板,看看是否能运行起来,通过数码管将结果显示出来,从而就知道程序设计的正确性。以前我也是这样做的,没什么不好。 在公司实习的时候,他们调试都是使用
[单片机]
<font color='red'>STM</font>32<font color='red'>学习</font>之串口的使用
STM32】一种基于Cortex-M内核的精确延时方法
Cortex-M内核是一种广泛应用于嵌入式系统中的32位微处理器内核,常常用于实现低功耗、高性能和高可靠性的应用程序。在某些应用场景中,需要对程序进行精确的延时控制,例如控制电机的启动时间、PWM波形的频率和占空比等。本文将介绍一种基于Cortex-M内核的精确延时方法,可以实现纳秒级别的精度。 1. 原理 Cortex-M内核中的SysTick定时器是一个24位的倒计时器,可以实现从1ms到2^24-1即16,777,215个时钟周期的定时。使用SysTick定时器可以实现微秒级别的延时控制,但是要实现纳秒级别的延时控制,则需要进行更高精度的计时方案。 通过测量实际的时钟周期数来精确计算时间,可以获得更高精度的计时结果。
[单片机]
STM32之八定时器中断
STM32的通用定时器是一个通过可编程预分频器(PSC)驱动的16 位自动装载计数器(CNT)构成。STM32的通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)等。 使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。STM32的每个通用定时器都是完全独立的,没有互相共享的任何资源。 STM3的通用TIMx (TIM2、TIM3、TIM4和TIM5)定时器功能包括: 1)16位向上、向下、向上/向下自动装载计数器(TIMx_CNT)。 2)16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为1~65535之间
[单片机]
<font color='red'>STM</font>32之八定时器中断
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved