前言
这里,我使用的是ALIENTEK精英STM32F103的开发板,以后的文章都是基于该开发板实现,撰写本文的目的主要是以后为了方便自己开发工程项目。
正文
关于系统时钟的功能,参考: https://blog.csdn.net/csshuke/article/details/78899911
关于芯片的资料,参考:https://wenku.baidu.com/view/e0c9703fc77da26925c5b08b.html
关于工作模式,参考:https://blog.csdn.net/it1988888/article/details/7944314
流水灯
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
int main(void)
{
delay_init();
LED_Init();
while(1)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_5); //相当于设置GPIOB口的引脚5低电平
GPIO_SetBits(GPIOE,GPIO_Pin_5); //相当于设置GPIOB口的引脚5高电平
delay_ms(300); //延时300ms
GPIO_SetBits(GPIOB,GPIO_Pin_5);
GPIO_ResetBits(GPIOE,GPIO_Pin_5);
delay_ms(300);
}
}
#include "led.h"
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //初始化一个结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);
//功能为打开或关闭对应的外设输出时钟端口
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //设置对应的引脚,端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //普通推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口时钟频率50MHZ
GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化该端口号GPIOB
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_SetBits(GPIOE,GPIO_Pin_5); //初始化该端口号GPIOE
}
我们发现,写一个简单的流水灯,跟51系列的单片机相比,需要这么多步骤;但由于这个原因,STM32有着51系列不能比的功能优势。在51中,因为芯片引脚少,所以默认端口的时钟都是开的,哪怕我们不使用这个端口,而且时钟频率大致都是固定不变的,我们可以直接使用寄存器,如P0,来控制。
蜂鸣器
我的开发板的蜂鸣器是在GPIOB的引脚8,这里,参考上述流水灯,能够实现蜂鸣器。
#include "sys.h"
#include "delay.h"
#include "beep.h"
int main(void)
{
delay_init(); //延时函数初始化
BEEP_Init(); //蜂鸣器初始化
while(1)
{
GPIO_SetBits(GPIOB,GPIO_Pin_8);
}
}
void BEEP_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能GPIOB端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //BEEP-->PB.8 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
改进
以下方法也能驱动LED灯
#define LED0 PBout(5) //PB5
LED0 = 1;
//IO口操作,只对单一的IO口!
//确保n的值小于16!
//位带操作,实现51类似的GPIO控制功能
//应该是类似51的位操作,如P1_0 = P1^0;
总结
通过流水灯和蜂鸣器的实验,让我大致了解STM32的开发过程以及跟51系列单片机的不同;这激发了我继续深入学下去的动力。
下一篇,有关于按键输入和串口实验