标题STM32 基础实验点亮一颗LED
文章目录
目录
一、初入CSDN
(1)简要介绍:
自私的说,决定发稿csdn主要是为了,促进自己不断更新来坚持学习,并相互学习积累经验;内容主要是发表并记录一些自己感兴趣的stm32的实验以及做实验中遇见的坑或问题,顺便也打发封校的空闲时间。笔者水平有限,希望大家多多指教,各抒己见交流学习,同时希望笔者的内容有帮助到你。如果有所帮助还请点点赞,表示支持哦。最后感谢各位的阅读(不喜勿喷)。
二、基于stm32f10c8t6的基础实验点亮一颗LED
(1)stm32芯片型号说明
由于笔者身为学生党,结合自身需求,以及性价比要求,芯片选择主要以STM32F103C8T6这个型号的芯片做一些基础实验,那么先介绍一下:
| 1 | STM32 | 代表ARM Cortex-M内核的32位微控制器。 |
|---|---|---|
| 2 | F | F代表芯片子系列。 |
| 3 | 103 | 103代表增强型系列。 |
| 4 | c | R这一项代表引脚数,其中T代表36脚,C代表48脚,R代表64脚,V代表100脚,Z代表144脚,代表176脚。 |
| 5 | 8 | B这一项代表内嵌Flash容量,其中6代表32K字节Flash,8代表64K字节Flash,B代表128K字节Flash,C代表256K字节Flash,D代表384K字节Flash,E代表512K字节Flash,G代表1M字节Flash。 |
| 6 | T | T这一项代表封装,其中H代表BGA封装,T代表LQFP封装,U代表VFQFPN封装。 |
| 7 | 6 | 6这一项代表工作温度范围,其中6代表-40——85℃,7代表-40——105℃。 |
(2)点亮LED原理
可以先看看这个示意图:
根据个人理解,可以通俗易懂的理解为,高电平到低电平的导通电路。即是当根据二极管的单向导通的特性,从高电平流向低电平的原理,使改变我们LED对应的引脚高、低电平的状态从而实现点亮和熄灭LED的效果。从这里可以知道我们主要需要配置引脚的高低状态即可。具体的I/O端口位基本结构可以参考stm32的数据手册,已在文末附上链接。笔者便不多解释。
(3)代码部分
然后结合代码可以知道如何具体配置GPIO,如图所示:
#include "stm32f10x.h"
int main()
{
GPIO_InitTypeDef GPIO_InitStructure; //定义结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //使能GPIOB时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //配置引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //配置模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz
GPIO_Init(GPIOB,&GPIO_InitStructure); //初始化GPIOB
GPIO_SetBits(GPIOB,GPIO_Pin_8); //给PB8高电平
while(1)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_8); //给PB8低电平
}
那么笔者结合写好的注释解释说明一下关键点,首先是定义一个GPIO的结构体使能GPIOx时钟(结构体C语言学习了不多说),结构体对应的三个参数Pin_x(引脚)、Mode(模式)、Speed(速度);主要说说模式配置为推挽输出可以理解为因为需要起到一个放大功率,使得效果显示更加直观;然后是对GPIOx初始化。
再说明一下GPIO_SetBits();与GPIO_ResetBits();见下图所示:
/**
* @brief Sets the selected data port bits.
* @param GPIOx: where x can be (A..G) to select the GPIO peripheral.
* @param GPIO_Pin: specifies the port bits to be written.
* This parameter can be any combination of GPIO_Pin_x where x can be (0..15).
* @retval None
*/
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
assert_param(IS_GPIO_PIN(GPIO_Pin));
GPIOx->BSRR = GPIO_Pin;
}
/**
* @brief Clears the selected data port bits.
* @param GPIOx: where x can be (A..G) to select the GPIO peripheral.
* @param GPIO_Pin: specifies the port bits to be written.
* This parameter can be any combination of GPIO_Pin_x where x can be (0..15).
* @retval None
*/
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
assert_param(IS_GPIO_PIN(GPIO_Pin));
GPIOx->BRR = GPIO_Pin;
}
/**
* @brief Writes data to the specified GPIO data port.
* @param GPIOx: where x can be (A..G) to select the GPIO peripheral.
* @param PortVal: specifies the value to be written to the port output data register.
* @retval None
*/
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)
{
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
GPIOx->ODR = PortVal;
}
从图中的定义可以看到所对应的参数如何填写,如GPIO_SetBits(GPIOB,GPIO_Pin_8);
GPIO_SetBits函数以笔者的教材解释为:置位所选定端口的一个或多个所选定的位为高。简单理解为给对应引脚为高电平。
GPIO_ResetBits函数以笔者的教材解释为:置位所选定端口的一个或多个所选定的位为低。简单理解为给对应引脚为低电平。
GPIO_Write函数也比较常用,可简单理解为给指定的外设端口写入数据。如GPIO_Write(GPIOB,0xffff);//给GPIOB所有I/O端口写1 。
(4)效果展示

三、总结与扩展
总结:可以看到只需要简单的一段代码即可实现点亮一颗LED的实验。这一节只需要,掌握GPIO结构体配置,GPIO端口配置,以及相关函数调用。所以要有信心一步步积累理论和实践经验,一起学习加油!
扩展:仅通过以上内容结合for等循环可实现闪烁灯、指定灯、流水灯、跑马灯等实验。大胆尝试探索吧,欢迎讨论。
附上参考文献链接与视频链接出处
链接: stm32数据手册.提取码:3232
链接: 参考GPIO基础结构视频讲解.
链接: 参考Keil5库函数工程配置.
链接: 点亮单灯视频讲解.
312

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



