绍兴网站建设模板网站,潍坊企业网站建设,宠物网站制作费用明细,wordpress 自动发表原理介绍
原理介绍详见#xff1a;
【STM32】江科大STM32学习笔记汇总(已完结)_stm32江科大笔记-CSDN博客https://blog.csdn.net/u010249597/article/details/134762513 项目准备
1.在项目文件夹中新建3-1 LED文件夹
2.keil新建项目#xff0c;打开新建的3-1 LED#xf…原理介绍
原理介绍详见
【STM32】江科大STM32学习笔记汇总(已完结)_stm32江科大笔记-CSDN博客https://blog.csdn.net/u010249597/article/details/134762513 项目准备
1.在项目文件夹中新建3-1 LED文件夹
2.keil新建项目打开新建的3-1 LED命名为project
4.工程芯片选择STM32F103C8因为课程中的芯片是STM32F10318C8T6
5.新建startlibraryUser文件夹
6.按照下面给出的网址将三个文件夹各自所需的文件加入对应的文件夹中
小白跟做江科大32单片机之新建工程-CSDN博客https://blog.csdn.net/weixin_58051657/article/details/139169087
注意
在User文件夹中要么自己新建一个main.c要么将江科大老师给的main.c文件复制到User文件夹中
7.添加完成之后点击那个三个小正方体新建三个组——startlibraryUser在start组下添加下图的文件 8.将外部Library文件夹汇中所有文件都添加到软件中新建的Library组中
9.将外部User文件夹汇中所有文件都添加到软件中新建的User组中
10.添加外部文件对应路径
11.添加USE_STDPERIPH_DRIVER定义 12.配置debug 13.debug中setting选择 14.编译测试要保证0错误0报错 提示
可以在江科大老师分享的第二个文件夹中找到keilkill.bat文件删除中间文件减小项目占用的空间 具体实现
1.按照江科大老师给的连接示意图连接LED 操作GPIO需要提前准备三步 ①.用RCC开启GPIO时钟 ②.GPIO_Init初始化GPIO ③.使用输出或输入函数控制GPIO口
2.编写代码 由上图可知要点亮需要选择0A这个端口点亮LED
所以在main中编写
#include stm32f10x.h // Device header
int main() { /*操作GPIO的三步*/ //1.开启RCC时钟RCC_APB2Periph_GPIOA表示要点亮OA的LED RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟 //使用各个外设前必须开启时钟否则对外设的操作无效 //2.引用结构体初始化GPIO GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量 GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; //GPIO模式赋值为推挽输出模式 GPIO_InitStructure.GPIO_Pin GPIO_Pin_0; //GPIO外设P0引脚赋值为第0号引脚 GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; //GPIO速度默认赋值为50MHz GPIO_Init(GPIOA, GPIO_InitStructure); //将赋值后的构体变量传递给GPIO_Init函数 GPIO_ResetBits(GPIOA, GPIO_Pin_0); //将PA0引脚设置为低电平LED亮 GPIO_SetBits(GPIOA, GPIO_Pin_0); //将PA0引脚设置为高电平LED灭 while(1) { } }
但上面这些代码只能实现一瞬间LED的亮灭或在上电后LED始终保持灭或始终保持亮
改进
3.引入Delay函数
①新建system文件夹把江科大老师提供的Delay相关文件添加到system文件夹中
②按照项目准备中的步骤将system文件夹的内容加入到3-1 LED项目中
4.引入Delay函数
#include stm32f10x.h // Device header
#include Delay.h
int main() { /*操作GPIO的三步*/ //1.开启RCC时钟RCC_APB2Periph_GPIOA表示要点亮OA的LED RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟 //使用各个外设前必须开启时钟否则对外设的操作无效 //2.引用结构体初始化GPIO GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量 GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; //GPIO模式赋值为推挽输出模式 GPIO_InitStructure.GPIO_Pin GPIO_Pin_0; //GPIO外设P0引脚赋值为第0号引脚 GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; //GPIO速度默认赋值为50MHz GPIO_Init(GPIOA, GPIO_InitStructure); //将赋值后的构体变量传递给GPIO_Init函数 GPIO_ResetBits(GPIOA, GPIO_Pin_0); //将PA0引脚设置为低电平LED亮 GPIO_SetBits(GPIOA, GPIO_Pin_0); //将PA0引脚设置为高电平LED灭 while(1) { /*通过设置PA0引脚的高低电平实现LED闪烁有下面3种方法*/ /*最终我选用方法3点亮LED*/ /*方法1GPIO_ResetBits设置低电平GPIO_SetBits设置高电平*/ /*GPIO_ResetBits(GPIOA, GPIO_Pin_0); //将PA0引脚设置为低电平 Delay_ms(500); //延时500ms GPIO_SetBits(GPIOA, GPIO_Pin_0); //将PA0引脚设置为高电平 Delay_ms(500); //延时500ms*/ /*方法2GPIO_WriteBit设置低/高电平由Bit_RESET/Bit_SET指定*/ /* GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET); //将PA0引脚设置为低电平 Delay_ms(500); //延时500ms GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET); //将PA0引脚设置为高电平 Delay_ms(500); //延时500ms*/ /*方法3GPIO_WriteBit设置低/高电平由数据0/1指定数据需要强转为BitAction类型*/ GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)0); //将PA0引脚设置为低电平 Delay_ms(500); //延时500ms GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)1); //将PA0引脚设置为高电平 Delay_ms(500); //延时500ms } }
5.最终效果