您的位置 首页 传感器

STM32 开发板入门教程 (一) GPIO

这个章节我们将学习最基本的STM32的GPIO的应用我们将分为两个章节来学习第一部份:GPIO的基本应用和IO口的配置第二部份

这个章节咱们将学习最根本的 STM32GPIO 的运用. 咱们将分为两个章节来学习.

榜首部份: GPIO 的根本运用和 IO 口的装备
第二部份: 外部中止的运用

————————————————————————–

1: 规划要求:
开发板上有 2 个 LED,咱们的意图为有规则的点亮 LED1 和 LED2. 当按键按下去的时分一切的灯灭, 等候 2 秒钟后康复有规则的点亮.

2: 硬件电路:

3: 软件程序规划:
(1) 依据要求装备 GPIOA 中的 PA0,PA1 为输出, PA3, PA8 为输入
关于下面程序中的GPIO_InitStructure.GPIO_Speed 和 GPIO_InitStructure.GPIO_Mode 引荐咱们看下面两篇文章.

STM32 GPIO的十大优胜功用总述
补白: 当STM32的GPIO端口设置为输出形式时,有三种速度能够挑选:2MHz、10MHz和50MHz,这个速度是指I/O口驱动电路的速度,是用来挑选不同的输出驱动模块,到达最佳的噪声操控和降低功耗的意图。

STM32 GPIO端口的输出速度设置
补白: 共有8种形式,能够经过编程挑选:
1. 浮空输入
2. 带上拉输入
3. 带下拉输入
4. 模仿输入
5. 开漏输出——(此形式可完结hotpower说的真双向IO)
6. 推挽输出
7. 复用功用的推挽输出
8. 复用功用的开漏输出
形式7和形式8需依据详细的复用功用决议。

void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;


GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, GPIO_InitStructure);


GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, GPIO_InitStructure);
}

(2) 翻开 GPIOA 的时钟, 由于 STM32 是一个低功耗的 MCU , 每一个你运用的外围设备都需求独自敞开时钟, 假如不敞开将不能运用, 这个也是关于 STM32 初学者简单忽略的当地


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |
RCC_APB2Periph_AFIO, ENABLE);

STM32共有5种时钟源,其间三种不同的时钟源可用作为驱动体系时钟(SYSCLK);
1、HSI 由内部8MHz RC振荡器发生,它是能够直接用来作为体系时钟或经2分频后作为PLLSRC输入。
HIS时钟频率在出厂时被校准在1%(25°C),在体系复位时,工厂校准值会被装载到时钟操控寄存器的HISCAL[7..0] 位。
用户能够经过更改HISCAL[4..0]来调整HSI频率。
别的时钟寄存器中有一个HSIRDY位用来指示HSI RC是不稳定作业,在时钟启往后,直到这个标志方位被硬件置1后,HSI RC时钟才被输出。
HSI RC时钟还能够用时钟寄存器中的HSION位来发动和封闭。

HSI时钟一同也是HSE晶体荡振器的备用时钟源。

运用HSE时钟,程序设置时钟参数流程:
1、将RCC寄存器从头设置为默认值RCC_DeInit;
2、翻开外部高速时钟晶振HSERCC_HSEConfig(RCC_HSE_ON);
3、等候外部高速时钟晶振作业HSEStartUpStatus = RCC_WaitForHSEStartUp();
4、设置AHB时钟RCC_HCLKConfig;
5、设置高速AHB时钟RCC_PCLK2Config;
6、设置低速速AHB时钟RCC_PCLK1Config;
7、设置PLLRCC_PLLConfig;
8、翻开PLLRCC_PLLCmd(ENABLE);
9、等候PLL作业while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
10、设置体系时钟RCC_SYSCLKConfig;
11、判别是否PLL是体系时钟while(RCC_GetSYSCLKSource() != 0x08)
12、翻开要运用的外设时钟RCC_APB2PeriphClockCmd()/RCC_APB1PeriphClockCmd()

详细设置请参阅下面的文章

STM32时钟体系与软件装备

STM32的时钟体系分析

STM32 的时钟与RTC

(3) 设置外部中止, 一切的 GPIO 口都能够作为外部中止源. 详细能够参阅下面这篇文章.

STM32中外部中止与外部事情


GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource3);

EXTI_InitStructure.EXTI_Line = EXTI_Line3;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(EXTI_InitStructure);

相同不要忘掉翻开时钟, 咱们在翻开 PA 口的时分现已加上了 RCC_APB2Periph_AFIO, 这儿再提示咱们一下.

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |
RCC_APB2Periph_AFIO, ENABLE);

最终便是编写外部中止进口函数.
void EXTI3_IRQHandler(void)
{
int i;

if(EXTI_GetITStatus(EXTI_Line9) != RESET)
{
GPIO_SetBits(GPIOA,GPIO_Pin_0);
GPIO_SetBits(GPIOA,GPIO_Pin_1);

for(i=0;i<=8000000;i++);

GPIO_ResetBits(GPIOA,GPIO_Pin_0);
GPIO_ResetBits(GPIOA,GPIO_Pin_1);

for(i=0;i<=1000000;i++)



EXTI_ClearITPendingBit(EXTI_Line3);
}
}

不要忘掉在中止函数处理完结后清掉标志位,否则会不断的进入中止.

(4) 编译与调试
咱们现已完结一切程序编写部份, 接下来便是将工程编译成功后下载到咱们的 Mini-STM32 开发板中进行调试和仿真.
假如看到 LED 有规则的点亮和平息, 按下按钮后 LED 先是一同平息, 在一同点亮, 然后康复有规则的点亮这个进程, 阐明咱们现已到达咱们的规划方针.

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/chuanganqi/256534.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部