一、引言
之前没接触过stm32,纯小白,所以在上课听老师讲的同时,在课后还看了b站上的教程,链接如下,完成作业的时候也参考了这个教程
STM32入门教程-2023版 细致讲解 中文字幕_哔哩哔哩_bilibili
拿到老师发的板子后还自主学习了怎么焊排针、接线等等,最终完成了本次作业
介绍
STM32F103VET6是一款由意法半导体公司(ST)推出的基于Cortex-M3内核的32位微控制器,硬件采用LQFP48封装,属于ST公司微控制器中的STM32系列。
STM32系列微控制器采用了ARM Cortex-M内核,包括Cortex-M0、Cortex-M3、Cortex-M4和Cortex-M7等不同的内核版本,以满足不同应用场景下的性能和功耗需求。此外,STM32产品系列还提供了丰富的外设资源,包括通用输入输出端口(GPIO)、通用定时器(TIM)、串行通信接口(USART/SPI/I2C)、模拟数字转换器(ADC/DAC)等,以满足不同应用的需求
二、代码
第一次作业尝试,直接在main.c函数里实现了,没有用led.c和led.h,功能实现简单粗暴
1.main.c
直接设置对应led引脚的高低电平控制灯的亮灭
先初始化GPIO,使用RCC_APB2PeriphClockCmd函数使能GPIOA时钟,并配置GPIOA的引脚8、11和12为输出模式,设置速度为50MHz
然后进入主循环, GPIO_ResetBits让引脚转为低电平,GPIO_SetBits让引脚转为高电平,因为LED低电平亮,所以GPIO_ResetBits为亮灯,GPIO_SetBits为灭灯
通过“亮灭灭”“灭亮灭”“灭灭亮”然后循环,实现流水灯
每段后再加了个延时,使状态切换速度变慢,不然切换速度太快看上去灯是一直亮的
#include "stm32f10x.h"
static void delay(uint32_t time);
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;//GPIO结构体有三个参数
GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP;//模式
GPIO_InitStructure.GPIO_Pin= GPIO_Pin_8|GPIO_Pin_11|GPIO_Pin_12;//端口
GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;//速度
GPIO_Init(GPIOA,&GPIO_InitStructure);
while (1)
{
GPIO_ResetBits(GPIOA, GPIO_Pin_8);
GPIO_SetBits(GPIOA, GPIO_Pin_11);
GPIO_SetBits(GPIOA, GPIO_Pin_12);
delay(500);//亮灭灭
GPIO_SetBits(GPIOA, GPIO_Pin_8);
GPIO_ResetBits(GPIOA, GPIO_Pin_11);
GPIO_SetBits(GPIOA, GPIO_Pin_12);
delay(500);//灭亮灭
GPIO_SetBits(GPIOA, GPIO_Pin_8);
GPIO_SetBits(GPIOA, GPIO_Pin_11);
GPIO_ResetBits(GPIOA, GPIO_Pin_12);
delay(500);//灭灭亮
}
}
static void delay(uint32_t time)
{
uint32_t i,j;
for(i=0;i<time;++i)
{
for(j=0;j<10000;++j)
{
//空循环
}
}
}
2.延时函数
用老师给的延时函数代码
static void delay(uint32_t time)
{
uint32_t i,j;
for(i=0;i<time;++i)
{
for(j=0;j<10000;++j)
{
//空循环
}
}
}
三、实验结果
视频一直上传失败所以传了b站
作业一
四、总结
找灯对应的引脚找了一会儿才确定为GPIOA 的 8、11 和 12
这次作业让我更好地了解了STM32GPIO点灯,锻炼了我的动手实践能力,拓展了专业知识,令我受益匪浅
1411

被折叠的 条评论
为什么被折叠?



