IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32F103-LED模块 -> 正文阅读

[嵌入式]STM32F103-LED模块

32开发——灯控模块

硬件环境:单片机型号:STM32F103C8T6
软件环境:MDK514


前言

在做STM32单片机实验开发我们之前进行了开发环境的搭建,工程模板的建立以及单片机基础知识和GPIO相关知识的准备,下面我们进行32固件库开发第一个实验:控制LED,堪称单片机界入门的 hello Word,不仅可以熟悉单片机的引脚控制,更能对单片机的时钟进行深入了解,废话不多说,咱们进入正文, 跳转文尾



一、硬件资源

我的实验采用的STM32C8T8最小系统单片机,采用其他的单片机也可以进行本实验

1、芯片命名介绍:

STM32F103C8T6命名说明

符号说明
STM32ST公司采用ARM Cortex-M3内核的32位微控制器
F芯片子系列
103增强型系列
C引脚数,T:36,C:48,R:64,V:100,Z:144,I:176
8内部Flash容量(单位:字节),6:32K,8:64K,B:128K,C:256K,D:384K,E:512K,G:1M
T芯片封装,H:BGA,T:LQFP,U:VFQFPN
6工作温度,6: -40 ~ 85℃,7: -40 ~ 105℃

2、芯片资源介绍

??STM32F103C8是高性能ARM-M3系列, 32位RISC核心操作,工作在一个72 MHz的频率,拥有Flash =64Kb RAM = 20Kb、两组10通道12位同步A/D、三个通用16位定时器和一个PWM定时器、1个CAN、2个I2C、2个SPI、3个URAT通道,一个USB等内嵌资源的芯片

一、电气原理图

下面是本次实验的板子,与LED原理图
在这里插入图片描述
??因为板子只自带一个LED,因为不需要其他的控制方式,只需要芯片内给PC13 引脚置低,即可实现LED电路导通,另外需要找到烧写代码的下载原理图,连接电路,我是使用SWD下载方式,只需要连接4根线,找到板子上的SWD接口原理图并对照实物图
在这里插入图片描述

二、电器件连接

因为不需要其他的控制方式,只需要连接一个下载电路。

通过

三、开发思路

1、须知

  • 需要控制引脚PC13,即GPIOC第13个引脚,低电平有效
  • 找到IO口对应的时钟总线 ,即ABP2 。可查阅 —— 图一、系统框架图
  • 关于GPIO几个重要函数
    在这里插入图片描述

2、控制LED流程与步骤:

在这里插入图片描述

四、代码实践

因为LED 作为STM32半只的一个外设,我将其封装为一个模块放入HARDWARE文件中,以后需要可以直接调用,
led.h文件

#ifndef LED_H    
#define LED_H

void LED_Init(void);
	
#endif

==引用条件编译原因,防止多文件编译时,发生重复编译 ==

下面是led.c文件函数示例:

#include "led.h"
#include "stm32f10x.h"  //顶层头文件
void LED_Init(void)
{
	GPIO_InitTypeDef LED_InitStruct;  //叶柄:定义一个结构体变量LED_InitStruct
	//1、打开串口时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE );
	//2、配置并初始化串口
	LED_InitStruct.GPIO_Pin = GPIO_Pin_13;    //PC13
	LED_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出
	LED_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

	GPIO_Init(GPIOC, &LED_InitStruct);  //初始化串口
	//3、控制串口读写(一般是主函数控制读写,这里LED默认关闭,即置高)
	GPIO_SetBits(GPIOC, GPIO_Pin_13);  
}

主函数main.c

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
int main () 
{
	LED_Init();
  while(1)
	{
		GPIO_ResetBits(GPIOC, GPIO_Pin_13); //LED点亮
		delay_s(1);
		GPIO_SetBits(GPIOC, GPIO_Pin_13); //LED熄灭
		delay_s(1);
	}	
	return 0;
}

五、问题与思考

  1. 检查不到设备:
    解决方式:检查驱动是否安装好,检查型号选择是否正确ST-link等

  2. debug,中看不到寄存器——案例一
    需引入一个文件STM32F103_SVD文件

  3. 函数相似导致选错 ——案例二,如下
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE );
    RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC, ENABLE );
    注意分清楚函数字母的含义就不会再次出错了

思考

1、为什么在led.c文件中引用了rcc、gpio相关函数,却没有调用相关头文件,而用STM32f10x代替了所有库函数头文件
原因:顶层头文件stm32f10x.h这个文件包含了STM32F10x全系列所有外设寄存器的定义(寄存器的基地址和布局)、位定义、中断向量表、存储空间的地址映射等,
好吧可能是不是这个原因,我查不到

六、参考资料

【STM32F103笔记】2、单片机中的HelloWorld——流水灯(简约的阐述了启动文件与时钟问题)
KELL5中Debug调试


总结

重点在于库函数的开发
1:找到相关源文件和头文件
2:通过头文件浏览库函数大致的作用,学会查阅函数列表参数和库函数的调用
3:先列出整体控制逻辑,后代码实现,
4:有BUG,不要慌,检查语法后调试


千里之行,始于足下,32单片机入门篇已经学完,接下来是更多模块的学习和更多的bug的挑战,如何对待挫折和磨难将人分成了两类,第一类人发现问题,及时解决问题,在各种困难中汲取教训和经验,最后一路披荆斩棘,磨难称为了宝贵的财富,另一类人,将问题和磨难,看做痛苦的事,不善于去解决问题,不汲取教训,最后放弃于半途中

跳转文首

本人邮箱:1696024315@qq.com,欢迎交流讨论。
欢迎转载,转载请注明网址:https://blog.csdn.net/qq_43660925/article/details/120730048
MDK5的安装过程
STM32F1工程模板建立
单片机基础
STM32单片机GPIO口简介

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-10-15 11:57:21  更:2021-10-15 11:58:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:27:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码