基于正点原子mini开发板 STM32F103RCT6
基础几乎为零,从头开始学起。
依据"正点原子教程视频,零死角玩转STM32,STM32不完全手册,STM32F103固件函数库,STM32中文参考手册,STM32F10X数据手册"进行学习。
主要要自己进行编写的有,main.c,led.c,led.h
首先写led.h 这一部分为led.c的头文件,必不可少,代码很短
#ifndef _LED_H
#define _LED_H
void LED_Init(void);
#endif
#include "led.h"
#include "stm32f10x.h"
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD,&GPIO_InitStructure);
GPIO_SetBits(GPIOD,GPIO_Pin_2);
}
都还比较好理解,注意不要忘记#include “stm32f10x.h”,如果没有加这句,在后面的编写中会有很多错误,因为GPIO_InitTypeDef ,RCC_APB2PeriphClockCmd这些函数名都在stm32f10x.h中。
还要注意每个函数名的书写,有大小写的区别,例如GPIO_Mode_Out_PP,设置为推挽输出,其中PP为大写。当然,这些都可以直接复制粘贴= =,只要通过Go To Definition查看对应函数即可。
最后便是main.c 为应用程序代码,即实现功能作用
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
int main(void)
{
delay_init();
LED_Init();
while(1){
GPIO_SetBits(GPIOA,GPIO_Pin_8);
GPIO_SetBits(GPIOD,GPIO_Pin_2);
delay_ms(500);
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
GPIO_ResetBits(GPIOD,GPIO_Pin_2);
delay_ms(500);
}
}
delay为正点原子教程中带的一个已经编写好了的延时程序,添加之后可以直接使用。
GPIO_SetBits即将对应的IO口置1
GPIO_ResetBits则为置0
注意函数名的书写,刚开始没注意大小写没对上就错误了。
编写完成之后,编译出现了一个错误
..\SYSTEM\delay\delay.c(130): error: #20: identifier "SysTick_CLKSource_HCLK_Div8" is undefined
问了度娘之后,解决办法为:在delay.c中添加一句代码:#include "misc.h"
灯怎么亮需要看对应的硬件图,如果led一端接io口,另一端拉高,那么io口输出低电平的时候就会亮;如果另一端接地,那么输出高电平时候会亮。
在自己创建工程模板的时候要细心,每一个文件夹都不能缺失,.h文件一定记得添加到MDK中,不然会无法识别
有一个文件为stm32f10x_conf.h,是管理各种库中头文件的,其中可能有的.h被注释掉了,需要自己点看查看一下,也可以注释掉自己没用到的.h
还有就是在led.h中不用去写#define GPIO_SetBits这种语句,可以在main.c中直接调用
如果是进行位操作的话,需要在led.h中进行定义
#define LED0 PAOut(8)
#define LED1 PDOut(2)
同时还要添加#include “sys.h”
sys.h中定义了位操作
所有工程文件如图
再其他就没有遇到什么问题,开始比较简单。
说的不对的地方,请大家指正。初学