前言
本文用于记录学习过程,因个人水平有限,如有错误还请批评指正。
一、目的
使用STM32进行点灯实验
二、使用器材
1、keil 5
2、Proteus
三、Proteus仿真电路
元件包含:
1、STM32F103R6
2、LED-BIRG
3、POWER
4、RES(电阻)
四、keil 5操作
1、芯片选择
2、新建工程的勾选
3、添加main.c文件
五、main.c中的代码
#include "stm32f10x.h"
void delay_ms(int32_t ms);//延时函数声明
int main()
{
uint8_t k;//LED亮灭计数
/*LED初始化*/
GPIO_InitTypeDef GPIO_InitStructure;//定义GPIO初始化结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//打开GPIOA时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;//选择输出引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//设置IO翻转速度
GPIO_Init(GPIOA, &GPIO_InitStructure);//完成PA2设置
GPIO_ResetBits(GPIOA,GPIO_Pin_2);//熄灭LED
/*完成初始化,LED快闪5次*/
for(k=0;k<5;k++)
{
GPIO_SetBits(GPIOA,GPIO_Pin_2);
delay_ms(100);
GPIO_ResetBits(GPIOA,GPIO_Pin_2);delay_ms(100);
}
/*正常运行,LED慢闪*/
while(1)
{
GPIO_SetBits(GPIOA,GPIO_Pin_2);//LED亮
delay_ms(200);
GPIO_ResetBits(GPIOA,GPIO_Pin_2);//LED灭
delay_ms(200);
}
}
/*延时函数*/
void delay_ms(int32_t ms)
{ int32_t i;
while(ms--)
{
i=7500;//开发板晶振8MHz时的经验值4
while(i--);
}
}
六、代码解析
GPIO_InitTypeDef
该结构体内容
typedef struct
{
uint16_t GPIO_Pin; /*!< Specifies the GPIO pins to be configured.
This parameter can be any value of @ref GPIO_pins_define */
GPIOSpeed_TypeDef GPIO_Speed; /*!< Specifies the speed for the selected pins.
This parameter can be a value of @ref GPIOSpeed_TypeDef */
GPIOMode_TypeDef GPIO_Mode; /*!< Specifies the operating mode for the selected pins.
This parameter can be a value of @ref GPIOMode_TypeDef */
}GPIO_InitTypeDef;
GPIO_Pin 为引脚选择
GPIO_PinSpeed为翻转速度选择
GPIOSpeed_TypeDef 内容
typedef enum
{
GPIO_Speed_10MHz = 1,//默认为10MHZ
GPIO_Speed_2MHz,
GPIO_Speed_50MHz
}GPIOSpeed_TypeDef;
GPIO_Mode为模式选择
GPIOMode_TypeDef 内容
typedef enum
{ GPIO_Mode_AIN = 0x0,//模拟输入
GPIO_Mode_IN_FLOATING = 0x04,//浮空输入
GPIO_Mode_IPD = 0x28,//下拉输入
GPIO_Mode_IPU = 0x48,//上拉输入
GPIO_Mode_Out_OD = 0x14,//开漏输出
GPIO_Mode_Out_PP = 0x10,//推挽输出
GPIO_Mode_AF_OD = 0x1C,//复用开漏输出
GPIO_Mode_AF_PP = 0x18//复用推挽输出
}GPIOMode_TypeDef;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);为打开GPIOA时钟
其原型为
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;
GPIO_Init(GPIOA, &GPIO_InitStructure) ; 完成既定设置
原型:
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
GPIO_SetBits(GPIOA,GPIO_Pin_2); 将PA2置1
原型:
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
GPIO_ResetBits(GPIOA,GPIO_Pin_2): 为将PA2置0
原型:
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
七、仿真现象
快闪5次,之后慢闪
上一篇:【STM32】4-SysTick系统定时器实验
下一篇:STM32 掉电检测程序
推荐阅读最新更新时间:2024-11-13 12:14
设计资源 培训 开发板 精华推荐
- 了解ADI电网管理、能源计量方案,答题赢Kindle、《新概念模拟电路》【世健的ADI之路主题游 能源站】
- 第三代半导体如何测试 进阶技能备好了!收集能量抽好礼!
- 2024年STM32巡回研讨会即将开启!(9月3日-9月13日)
- 新年测评活动!ST NUCLEO-H743ZI“佩奇”待测,快来申请年后第一波测评!
- 【EEWORLD带你DIY】数字示波器V1.0进展贴
- 抢楼有奖:免费获得元器件样品本~~
- 泰克完整LED驱动测试方案 领跑节能亮化新时代
- ADI & 世健 带您了解 化学分析和分析仪器应用方案
- 有奖直播|英飞凌OBC解决方案深度详解 报名中!
- 下载喽:PCIe要了解的10件事和识别协议的BSX系列BERTScope误码率测试仪技术资料