1.mdk安装
直接跟着b站江协科技操作的,传送门:STM32入门教程-软件安装
2.连接电路
选择的是GPIO输出中的推挽输出,推挽输出就是可以输出高低电频,直接驱动小功耗器件。这里采用的是低电频点亮的方式。
根据这张图连接面包板上的电路。
这里我用的不是STLINK 用的是DAPmini 所以在keil5里面的debug里要选择CMSIS-DAP Debugger
3.创建工程
跟着b站江协科技创建工程,传送门:STM32入门教程-新建工程
建好之后左边的工程目录就是这样:
(比较繁琐,之后创建工程可直接复制目录)
点开魔法棒的这一页添加了 USE_STDPERIPH_DRIVER 和 文件路径,
如图:
4.编写代码
1.原理
操作stm32的GPIO的三个步骤:
- 使用RCC开启GPIO的时钟
- 使用GPIO_Init函数初始化GPIO
- 使用输出或输入的函数控制GPIO口
总共涉及了RCC和GPIO两个外设
RCC是时钟控制,这里我们用到APB2这个外设时钟控制函数
GPIO_Init函数,用结构体的参数来初始化GPIO口,用法是先定义一个结构体,给它们赋值,然后再调用这个函数,这个函数就会自动把外设的各个参数配置好。
GPIO_InitTypeDef定义的结构体中有三个参数,分别用于:
- GPIO_Mode:选择输出方式
- GPIO_Pin:选择引脚
- GPIO_Speed:选择输出速度
GPIO有将指定端口设置为高低电频的函数:
- GPIO_SetBits函数,将指定端口设置为高电频
- GPIO_ResetBits函数,将指定端口设置为低电频
- GPIO_WriteBit函数,比上面两个多一个参数,可直接指定高电频或低电频
2.编译并下载到最小系统板上
根据以上原理编写代码:
#include "stm32f10x.h" // Device header
#include "Delay.h" //延时器
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP; //选择输出方式 这里是推挽输出
//推挽输出就是可以输出高低电频,直接驱动小功耗器件
GPIO_InitStructure.GPIO_Pin= GPIO_Pin_0; //选择引脚 使用的是GPIO外设的0号引脚 A0 所以选GPIO_Pin_0
GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;//选的50MHz的输出速度
GPIO_Init(GPIOA,&GPIO_InitStructure);//把GPIO_InitStructure放在GPIO_Init函数的第二个参数上,初始化就完成了
while(1){
GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);
Delay_ms(1000);
GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);
Delay_ms(1000);
}
}
5.运行结果
运行结果如下:可以看到led灯以1秒一次的频率闪烁。