首先
建议大家先在b站看正点原子或者野火的stm32视频,本贴仅适用于刚刚接触stm32并且使用大疆robomasterA型开发板的同学,我会分享实现的代码和学习的方法,供大家后续学习A板时可以参考,帖主也是正在学习,欢迎大家一起讨论
此教程建立在你会使用keil5,
一:如何使用A板原理图
1.1 下载A板原理图
虽然说正点原子和野火的开发板都是stm32,芯片是一样的,但IO口和外设有一些是不一样的,所以大家需要配合robomasterA板的原理图学习
下载在链接如下:大疆A板
1.2 查找A板中的灯
开始学的时候看正点原子的代码点灯点不起来,后来发现这两个板子灯的位置都不一样肯定点不起来啊(悲)
首先打开原理图
第一次看,看着眼花缭乱对对吧。这时候使用Ctrl+f启用搜索,搜索led,就可以找到A板led的位置了,不仅是LED_G和LED_G(黄色标记),只要是带二极管的都可以点亮(红色圈)
以LED_G为例,后面的(PF14)是GPIO14的意思,对应到点灯程序中,要开启GPIO14对应的时钟和Pin口(详情看后面的代码)
二:A板代码
led.h代码
//ifndef如果看不懂建议先看正点或者野火教程
//ifndef _LED_H
//define _LED_H
#引库我不知道有没有引多,如果发现sys没用就可以不用
#include "stm32f4xx.h"
#include "sys.h"
//这里我参考的是野火的stm32代码,使用宏定义#define便于后期移植,当然你也可以不宏定义
//对应上图的一排的二极管,我写的是开GPIOG中1到8的Pin口
#define LED_GPIO_PIN GPIO_Pin_8 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5| GPIO_Pin_6 | GPIO_Pin_7
#define LED_GPIO_PORT GPIOG
#define LED_GPIO_CLOCK RCC_AHB1Periph_GPIOG
//这个是在led.c文件中需要使用的Init文件,需要现在led.h中先写
void LED_Init(void);
#endif
led.c
//包含前面定义的led.h
#include "led.h"
//Init在led.h中提过,需要在led.c中编写
//下面的内容除了注释内容外其他看不懂可以看野火的教程,其他都是一样的
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(LED_GPIO_CLOCK, ENABLE);//打开在led.h对应时钟
GPIO_InitStructure.GPIO_Pin =LED_GPIO_PIN;// 打开在led.h中对应Pin口(A板led的pin口)
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(LED_GPIO_PORT, &GPIO_InitStructure);
}
main.c
#include "main.h"
#include "delay.h"
#include "stdio.h"
#include "led.h"
int main(void)
{
delay_init(168);//初始化delay,delay函数自带有
LED_Init();//初始化LED,在led.c中写的
while(1)
{
GPIO_SetBits(GPIOG,GPIO_Pin_1);//Set为高电平,在这里是关灯
delay_ms(200);
GPIO_ResetBits(GPIOG,GPIO_Pin_1);//Reset为高电平,在这里是关灯
delay_ms(200);
GPIO_SetBits(GPIOG,GPIO_Pin_2);
delay_ms(200);
GPIO_ResetBits(GPIOG,GPIO_Pin_2);
delay_ms(200);
GPIO_SetBits(GPIOG,GPIO_Pin_3);
delay_ms(200);
GPIO_ResetBits(GPIOG,GPIO_Pin_3);
delay_ms(200);
GPIO_SetBits(GPIOG,GPIO_Pin_4);
delay_ms(200);
GPIO_ResetBits(GPIOG,GPIO_Pin_4);
delay_ms(200);
GPIO_SetBits(GPIOG,GPIO_Pin_5);
delay_ms(200);
GPIO_ResetBits(GPIOG,GPIO_Pin_5);
delay_ms(200);
GPIO_SetBits(GPIOG,GPIO_Pin_6);
delay_ms(200);
GPIO_ResetBits(GPIOG,GPIO_Pin_6);
delay_ms(200);
GPIO_SetBits(GPIOG,GPIO_Pin_7);
delay_ms(200);
GPIO_ResetBits(GPIOG,GPIO_Pin_7);
delay_ms(200);
GPIO_SetBits(GPIOG,GPIO_Pin_8);
delay_ms(200);
GPIO_ResetBits(GPIOG,GPIO_Pin_8);
delay_ms(200);
}
}
我使用的是st-link进行烧录,烧录后即可实现跑马灯效果文章来源:https://www.toymoban.com/news/detail-402261.html
感觉帖子不错的话欢迎点赞噢文章来源地址https://www.toymoban.com/news/detail-402261.html
到了这里,关于STM32手把手点灯学习笔记(大疆robomasterA板)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!