STM32-自学笔记(6.用GPIO点亮LED)

发布者:快乐旅途最新更新时间:2022-04-19 来源: eefocus关键字:STM32  GPIO  点亮LED 手机看文章 扫描二维码
随时随地手机看文章

实验说明:将两个LED灯点亮,隔一段时间后,将它们熄灭。


硬件电路:

如图 GPIOA.2引脚连接LED灯,在连接一个1kΩ的限流电阻,最后接地。


         GPIOA.3引脚连接LED灯,在连接一个1kΩ的限流电阻,最后接地。(很简单)


主要来看软件设计(程序设计):


需要注意的几点:


置RCC寄存器组,使PLL输出72MHz时钟频率。

配置GPIOA.2和GPIOA.3为推挽输出,最大翻转频率为50MHz。

通过在GPIOA.2和GPIOA.3上输出高电平点亮LED,反之输出低电平则熄灭LED。

程序:


主函数main.c


#include"stm32f10x_lib.h"                                     //头文件

 

#define Delay(n)                                              //自定义变量

 

void RCC_Configuration (void);

 

void GPIO_Configuration (void);

 

int main (void)

 

{

 

vu32  n=2000000;                                     //定义延时函数

 

RCC_Configuration();                                 //设置系统时钟

 

GPIO_Configuration();                                //设置GPIO端口

 

GPIO_SetBits(GPIOA,GPIO_Pin_2);                      //设置GPIOA.2为高电平

 

GPIO_SetBits(GPIOA,GPIO_Pin_3);                      //设置GPIOA.3为高电平

 

Delay(n);                                            //延时

 

GPIO_ResetBits(GPIOA,GPIO_Pin_2);                    //设置GPIOA.2为低电平  

 

GPIO_ResetBits(GPIOA,GPIO_Pin_3);                    //设置GPIOA.3为低电平

 

while(1);

 

{

 

}

 

}

 


设置系统各部分时钟   RCC_Configuration


void RCC_Configuration(void)

 

{

 

ErrorStatus HSEStartUpStatus;      //定义枚举类型变量 HSEStartUpStatus

 

RCC_DeInit();                     //复位系统时钟设置

 

RCC_HSEConfig(RCC_HSE_ON);         //开启HSE

 

HSEStatrtUpStatus=RCC_WaitForHSEStartUp();   //等待HSE起振并稳定

 

if(HSEStatrtUpStatus==SUCCESS)     //判断HSE是否起振成功,是则进入if()内部

 

{

 

RCC_HCLKConfig(RCC_SYSCLK_Div1);   //选择HCLK(AHB)时钟源为SYSCLK分频

 

RCC_PCLK2Config(RCC_HCLK_Div1);    //选择PCLK2时钟源为HCLK(AHB)1分频

 

RCC_PCLK1Config(RCC_HCLK_Div2);    //选择PCLK1时钟源为HCLK(AHB)2分频

 

FLASH_SetLatency(FLASH_Latency_2);  //设置Flash延时周期数为2

 

FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);   //使能Flash预取缓存

 

//选择PLL时钟源为 HSE 1 分频,倍频数为9,则PLL=8MHz *9=72MHz

 

RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);

 

RCC_PLLCmd(ENABLE);                  //使能PLL

 

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);  //等待PLL输出稳定

 

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);    //选择SYSCLK时钟源为PLL

 

while(RCC_GetSYSCLKSource()!=0x08);      //等待PLL成为SYSCLK时钟源

 

}

 

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);    //打开APB2总线上的GPIOA时钟

 

}

 

 


设置各GPIO端口功能  GPIO_Configuration


void GPIO_Configuration(void)

 

{

 

GPIO_InitTypeDef GPIO_InitStructure;

 

//设置GPIOA.2和GPIOA.3为推挽输出,最大翻转频率为50MHz

 

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3;

 

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

 

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

 

GPIO_Init(GPIOA,&GPIO_InitStructure);

 

}

关键字:STM32  GPIO  点亮LED 引用地址:STM32-自学笔记(6.用GPIO点亮LED)

上一篇:STM32库函数详解----(外部中断/事件控制器 EXTI)
下一篇:STM32-自学笔记(7.用GPIO点亮LED,程序用到的库函数介绍)

推荐阅读最新更新时间:2024-11-09 19:28

STM32-(23):定时器TIM(实验)
定时器实验: 透过配置定时器相关寄存器的配置,实现定时器2每1S中断一次,通过数码管将时间实时的显示出来。 用到的函数功能如下: (1) 利用TIM_Delnit()函数将Timer设置为默认缺省值; (2) TIM_InternalClockConfig()选择TIMx来设置内部时钟源; (3) TIM_Perscaler来设置预分频系数; (4) TlM_CIockDivision来设置时钟分割; (5) TIM_CounterMode来设置计数器模式; (6) TIM_Period来设置自动装入的值; (7) TIM_ARRPerloadConfig()来设置是否使用预装载缓冲器; (8) TIM_ITConfig()来开启
[单片机]
STM32-(23):定时器TIM(实验)
如何调整STM32单片机中flash与时钟速率之间的关系
void Flash_Init(void) { // 调整flash与时钟速率之间的关系 FLASH-》ACR |= FLASH_ACR_LA TE NCY; } void Flash_Unlock(void) { // FLASH-》CR 的第7位为解锁的标志位或者上锁的操作位 while(FLASH-》CR & FLASH_CR_LOCK) { FLASH-》KEYR = FLASH_FKEY1; FLASH-》KEYR = FLASH_FKEY2; } } void Flash_Lock(void) { FLASH-》CR |= FLASH_CR_LOCK; } void Flash_Clear_All_Flag(voi
[单片机]
如何调整<font color='red'>STM32</font>单片机中flash与时钟速率之间的关系
stm32 IDR寄存器软件仿真的BUG
/* * 函数名:Key_GPIO_Config * 描述 :配置按键用到的I/O口 * 输入 :无 * 输出 :无 */void Key_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; /*开启按键端口(PB0)的时钟*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStruc
[单片机]
<font color='red'>stm32</font> IDR寄存器软件仿真的BUG
Linux下s3c6410的GPIO操作(4)
1、前面几篇中,有一篇层调用过一个这样的函数,如下: static __init void s3c64xx_gpiolib_add_4bit(struct s3c_gpio_chip *chip) { chip- chip.direction_input = s3c64xx_gpiolib_4bit_input; chip- chip.direction_output = s3c64xx_gpiolib_4bit_output; } 此函数在arch/arm/plat-s3c64xx/gpiolib.c中定义, /* The s3c64xx_gpiolib_4bit routines are to control t
[单片机]
ST 发布新STM32G0微控制器,增加USB和CAN接口和更大存储器
意法半导体发布新STM32G0微控制器,增加USB-C全速双模端口、CAN FD接口和更大容量的存储器 中国,2021年7月8日——意法半导体 STM32G0* 系列Arm® Cortex®-M0+ 微控制器 (MCU)新增多款产品和更多新功能,例如,双区闪存、CAN FD接口和无晶振USB全速数据/主机支持功能。 对于注重预算的应用,新的STM32G050超值产品线、STM32G051和STM32G061主流产品线增加了丰富的模拟功能和最大容量18KB 的 RAM存储器,以及多达 48 引脚且售价极具竞争力的封装。 此外,STM32G0B0 超值产品线、STM32G0B1和STM32G0C1主流产品线给STM3
[单片机]
ST 发布新STM32G0微控制器,增加USB和CAN接口和更大存储器
stm32 .icf文件.map文件,汇编文件对照
(1) 从汇编语句中可以看出中断向量表的位置处于0x08004000。对应.ICF文件中的 define symbol __ICFEDIT_intvec_start__ = 0x08004000; 补充一点:中断向量表就是2条语句做为一个单元,里面存储的就是中断函数的入口地址。我们平时写的中断函数,就可以在某个中断的入口地址下面看到。 (2) define symbol __ICFEDIT_SYS_FUNC_start__ = 0x08004200; //functab 此部分是在0x08004200后插入一段代码,从矢量表中我们可以看出矢量表的最后的地址是0x0800412e。所以从0x08004200开始插入一
[单片机]
<font color='red'>stm32</font> .icf文件.map文件,汇编文件对照
STM32引脚模式GPIOMode_TypeDef
① 浮空输入_IN_FLOATING //串口输入 ② 带上拉输入_IPU ③ 带下拉输入_IPD ④ 模拟输入_AIN ⑤ 开漏输出_OUT_OD ⑥ 推挽输出_OUT_PP //置位 ⑦ 复用功能的推挽输出_AF_PP //串口输出 ⑧ 复用功能的开漏输出_AF_OD 推挽输出与开漏输出的区别 推挽输出:可以输出高,低电平,连接数字器件; 开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内). 推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止
[单片机]
STM32低功耗设置
前两个月在公司做了一个低功耗项目,现在功耗最低10uA不到,平均功耗40uA左右,算是达标了。因为是公司产品,就不方便贴代码、原理图了,该产品是一个小模块,可以方便的嵌入到各种系统里面。跟原子哥他们卖的NRF2401类似,是一个读卡器。 做这个项目中间也请了技术支持,因为外围电路芯片的功耗一直降不下来,经过与对方的反复交流,对方提供了低功耗的测试结果、硬件方案、软件方案,经过修改测试,最终成为我们的产品,功耗比较满意。 硬件方案选择的是STM32,外加某公司的读卡芯片。前期完成了读卡等功能的开发,最后一项开发内容是最艰巨也是最困难的---低功耗。在开发过程中,从硬件设计上不断裁剪元器件,软件上不断精简代码,功耗最低
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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