我最近在学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)
|