标题:
stm32的gpio口的介绍(交流和学习)
[打印本页]
作者:
周涛1331
时间:
2020-7-7 10:22
标题:
stm32的gpio口的介绍(交流和学习)
我最近在学stm32,想和大家分享自己的学习成果,也和大家一起学习交流。之前学习过15的库函数的套用,经过一段时间摸索,我对stm32的使用有了基础的了解。因为板子不是正点原子和野火,所以有些不同。 每个板子视频教学第一个介绍都是stm32的gipo口的介绍,这个io口跟51的io口定义全然不同,并且能配置自身频率,而且有些定义用到了结构体。而且stm32是32位的单片机,内部的32位寄存器太多,很难记住,所以建议使用库函数的办法,先学会套用,后来在更改参数或者做一些小项目的时候,对一些寄存器做一些更深入的理解。
首先我们讲一下gipo口void led_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //调用结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE); //定义时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //定义哪个口输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出速率为50Mhz
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //定义为推挽输出
GPIO_Init(GPIOG, &GPIO_InitStructure); //调用库函数配置io口
GPIO_SetBits(GPIOG,GPIO_Pin_6); //置一服务
}
这个截图你能看见这个是定义一个stm32的io口的操作过程,这个地方使用了结构体,可以看到,这样使调用更加明了。这里定义了
io的pa时钟,配置的是哪一个io口,输出速率,输出是推挽输出
。这些参数,集合在一个函数中,使用更加明了简捷。感觉很方便。
我提供一个灯亮小灯的程序。可以参考一下,有啥问题可以一起学习。我建了个群912803408.可以交流
单片机源程序如下:
/*****
** Descriptions:配置PG6为输出,驱动开发板上的LED指示灯D1以200毫秒的间隔闪烁
**--------------------------------------------------------------------------------------------*/
#include "stm32f10x.h"
//delay这里报错的原因是:delay函数用汇编实现的,导致了MDK误报。
#include "delay.h"
/***************************************************************************
* 描 述 : 初始化单片机控制D1的引脚PG6,并将D1的初始状态设置为熄灭
* 参 数 : 无
* 返回值 : 无
**************************************************************************/
void led_init(void)
{
//定义IO初始化配置结构体
GPIO_InitTypeDef GPIO_InitStructure;
//打开PA端口时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);
//配置的IO是PG6
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
//IO口速度为50MHz
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//配置为通用推挽输出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
//调用库函数GPIO_Init()配置IO
GPIO_Init(GPIOG, &GPIO_InitStructure);
//设置D1初始化状态为熄灭
GPIO_SetBits(GPIOG,GPIO_Pin_6);
}
/***************************************************************************
* 描 述 : 主函数
* 参 数 : 无
* 返回值 : 无
**************************************************************************/
int main(void)
{
//初始化用于驱动指示灯D1的引脚PG6
led_init();
//主循环
while(1)
{
//调用库函数GPIO_ResetBits()驱动LED指示灯D1的引脚(PG6)输出低电平,即点亮D1
GPIO_ResetBits(GPIOG,GPIO_Pin_6);
//软件延时200ms
sw_delay_ms(200);
//调用库函数GPIO_SetBits()驱动LED指示灯D1的引脚(PG6)输出高电平,即熄灭D1
GPIO_SetBits(GPIOG,GPIO_Pin_6);
//软件延时200ms
sw_delay_ms(200);
}
}
/********************************************END FILE********************/
复制代码
所有资料51hei提供下载:
led.7z
(192.91 KB, 下载次数: 6)
2020-7-7 19:19 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1