嵌入式开发之STM32学习笔记day06

基于STM32F103C8T6的开发实践——从入门到精通01

1. 引言

        STM32系列微控制器是STMicroelectronics推出的一款高性能、低功耗的32位微控制器,广泛应用于嵌入式系统中。STM32F103C8T6是其中非常受欢迎的一款,凭借其强大的性能、丰富的外设接口和低廉的价格,成为了开发者的首选之一。本文将通过实例,详细介绍如何基于STM32F103C8T6进行开发,并带领读者完成从简单的点亮LED到复杂外设控制的过程。

2. STM32F103C8T6概述

        STM32F103C8T6属于STM32F1系列,核心采用ARM Cortex-M3架构,工作频率最高可达72MHz,具有64KB的Flash存储器和20KB的RAM,支持丰富的外设接口,如USART、SPI、I2C、PWM、ADC等。其广泛应用于传感器数据采集、通信模块、工业控制等领域。

2.1 STM32F103C8T6的主要特点
  • 32位ARM Cortex-M3内核
  • 最高主频72MHz
  • 64KB Flash和20KB SRAM
  • 丰富的外设接口:USART、I2C、SPI、CAN、PWM、ADC等
  • 内置8通道12位分辨率的ADC
  • 低功耗设计,支持多种休眠模式
2.2 常见应用场景
  • 工业控制
  • 无线通信
  • 智能家居
  • 机器人控制
  • 数据采集与处理

3. 开发环境搭建

        为了开始STM32F103C8T6的开发,我们需要配置开发环境。这里推荐使用Keil uVision 5和STM32CubeMX这两个工具。Keil uVision 5是一款功能强大的嵌入式开发集成环境,而STM32CubeMX则可以帮助我们简化STM32的初始化代码配置。

3.1 安装Keil uVision 5

  1. 从Keil官网(https://www.keil.com)下载并安装Keil uVision 5。
  2. 配置好项目的目标微控制器为STM32F103C8T6。
  3. 安装相应的编译工具链和调试工具。
3.2 安装STM32CubeMX
  1. 从ST官方(https://www.st.com)下载并安装STM32CubeMX。
  2. 打开STM32CubeMX,选择目标芯片STM32F103C8T6,配置所需的外设。
  3. 生成初始化代码,导入到Keil中进行开发。
3.3 配置调试工具
  1. 使用ST-Link v2调试器进行程序下载和调试。
  2. 连接ST-Link调试器到STM32F103C8T6的SWD接口。

4. STM32F103C8T6开发实践

4.1 点亮LED:基础GPIO操作

        GPIO(General Purpose Input/Output)是STM32F103C8T6中最常见的外设之一。我们可以通过配置GPIO来控制LED灯的点亮与熄灭。

4.1.1 硬件连接
  1. 将一个LED与适当的电阻串联,连接到STM32的PA5引脚。
  2. 将另一端接地。
4.1.2 软件代码

        通过STM32CubeMX生成初始化代码,配置PA5为输出模式,然后编写代码使LED闪烁。

#include "stm32f10x.h"void GPIO_Configuration(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  // 开启GPIOA的时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;  // 配置PA5引脚GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  // 配置为推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  // 配置为50MHz速度GPIO_Init(GPIOA, &GPIO_InitStructure);  // 初始化PA5
}void delay(uint32_t count)
{while(count--);
}int main(void)
{GPIO_Configuration();  // 配置GPIOwhile(1){GPIO_SetBits(GPIOA, GPIO_Pin_5);  // 点亮LEDdelay(500000);  // 延时GPIO_ResetBits(GPIOA, GPIO_Pin_5);  // 熄灭LEDdelay(500000);  // 延时}
}
4.1.3 解释
  • 通过GPIO_Init函数配置PA5为推挽输出模式。
  • GPIO_SetBitsGPIO_ResetBits分别用于控制PA5输出高电平和低电平。
  • delay函数用来控制LED闪烁的频率。
4.2 外部中断:按键控制LED

        在嵌入式系统中,外部中断是非常常见的一种功能。通过外部中断,我们可以实现按键控制LED的功能。

4.2.1 硬件连接
  1. 按键与PA0引脚连接。
  2. LED与PA5引脚连接。
4.2.2 软件代码
#include "stm32f10x.h"void GPIO_Configuration(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  // 开启GPIOA时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;  // 配置PA5为LEDGPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  // 配置为推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;  // 配置PA0为按键输入GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  // 上拉输入GPIO_Init(GPIOA, &GPIO_InitStructure);
}void EXTI0_IRQHandler(void)
{if (EXTI_GetITStatus(EXTI_Line0) != RESET)  // 判断是否是PA0引脚的中断{GPIOA->ODR ^= GPIO_Pin_5;  // 切换LED状态EXTI_ClearITPendingBit(EXTI_Line0);  // 清除中断标志}
}int main(void)
{GPIO_Configuration();// 配置外部中断EXTI_InitTypeDef EXTI_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);EXTI_InitStructure.EXTI_Line = EXTI_Line0;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);while(1);
}
4.2.3 解释
  • 使用PA0引脚作为按键输入,并配置为上拉模式。
  • 通过外部中断将PA0的状态变化(按下按键)作为触发条件,改变LED的状态。
  • EXTI_Init函数配置外部中断,EXTI0_IRQHandler函数处理按键中断。

5. 高级功能

5.1 UART通信:串口调试与数据传输

        STM32F103C8T6支持USART功能,通过串口可以与PC或其他设备进行通信。

5.2 ADC与传感器数据采集

        STM32内置12位的ADC,可用于采集模拟信号,比如温度传感器的数据。

6. 总结

        本文介绍了基于STM32F103C8T6的开发实践,从基础的GPIO操作到外部中断、串口通信等高级功能的实现。通过这些实例,开发者可以快速上手STM32,并应用于各种嵌入式项目中。STM32F103C8T6凭借其高性能、低功耗和丰富的外设,依然是开发者在嵌入式开发中的首选。

7. 预告

        大家好!我是小程同学>o<,下一节我将为大家详细介绍并解释GPIO(通用输入输出)在STM32中的应用。GPIO是嵌入式开发中的基础外设,但它却在实际项目中起着至关重要的作用。无论是控制LED的点亮、读取传感器的数据,还是与外部设备进行通信,GPIO都能帮助我们实现各种功能。敬请期待,我将带你一起深入了解GPIO的配置、操作技巧以及在开发中的最佳实践!下节见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/898346.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习使用 Git 和 GitHub 开发项目的教程推荐

Git 和 GitHub 是现代软件开发中不可或缺的工具&#xff0c;无论你是个人开发者还是团队成员&#xff0c;掌握它们都能极大提升效率。本文精选了一系列优质教程资源&#xff0c;涵盖从基本 Git 命令到进阶多人协作的内容。这些教程既有文字形式&#xff0c;也有视频或交互式资源…

golang中的接口

1.简介 在go中的接口是以一种类型,一种抽象的类型。接口(interface)是一组函数method的集合,go中的接口不能包含任何变量。在go中接口中的所有方法都没有方法体,接口定义了一个对象的行为规范,只定义规范不实现。接口体现了程序的多态和高内聚低耦合的思想。go中的接口也是…

AI 浪潮下,职场的变与不变

如今&#xff0c;AI 如迅猛飓风&#xff0c;极速席卷职场&#xff0c;彻底搅乱了原有的秩序。你是否留意到&#xff0c;身边的工作方式正悄然生变&#xff1f;今天&#xff0c;【探星 AI 研习社】就为大家深入剖析&#xff0c;AI 如何改写职场剧本。无论你是大学生还是职场资深…

汇川EASY系列之以太网通讯(MODBUS_TCP做主站)

汇川Easy系列以太网通讯中(MODBUSTCP,plc做主站),终于可以不用使用指令就可以完成了,全程通过简单的配置就可通讯。本文将通过EASY系列PLC与调试助手之间完成此操作。具体演示如下; 关于主站和从站的介绍 A/请求:即主动方 向被动方发送的一个要求的信息。 B/主站:发…

npm error gyp info

在使用 npm 安装 Node.js 包时&#xff0c;可能会遇到各种错误&#xff0c;其中 gyp 错误是比较常见的一种。gyp 是 Node.js 的一个工具&#xff0c;用于编译 C 代码。这些错误通常发生在需要编译原生模块的 npm 包时。下面是一些常见的原因和解决方法&#xff1a; 常见原因及…

Oracle 19C分区表索引小结

一、大佬说&#xff08;杨廷琨&#xff09; LOCAL索引的最大好处是在进行分区操作&#xff0c;比如TRUNCATE PARTITION, DROP PARTITION时&#xff0c;不会出现索引INVALID的情况&#xff0c;不影响索引的可用性。由于GLOBAL索引所有的数据存储在一起&#xff0c;因此当执行分…

AutoHub场景演示|带您领略智能自动化操作的全新体验

AutoHub是一款由OpenCSG推出的基于前沿大型语言模型&#xff08;LLM&#xff09;的浏览器自动化工具&#xff0c;旨在通过智能对话交互和自动化技术&#xff0c;帮助用户更高效地浏览网页和完成任务。它不仅能够自动化繁琐的网页操作&#xff0c;还能够为用户提供精准的信息检索…

深入解析 Linux 声卡驱动:从架构到实战

在嵌入式 Linux 设备中&#xff0c;音频功能的实现离不开 Linux 声卡驱动。而 ALSA (Advanced Linux Sound Architecture) 作为 Linux 内核的音频框架&#xff0c;提供了一整套 API 和驱动模型&#xff0c;帮助开发者快速集成音频功能。本篇文章以 WM8960 音频编解码器&#xf…

thinkphp5模型查询数据库,查出来的字段直接修改成另外的名字

在ThinkPHP5中,如果你希望在查询数据库时将返回的字段名直接修改为其他名称,可以通过以下几种方式实现: 方法1:使用 field 方法指定字段别名 在查询时通过 field 方法直接为字段指定别名(使用 AS 关键字)。 示例代码: // 使用Db类查询 $result = Db::name(user)->…

关于前端指令

在前端开发中&#xff0c;指令&#xff08;Directives&#xff09;通常指在框架中使用的一种特殊的语法或机制&#xff0c;用于扩展 HTML 的功能。常见的指令主要存在于前端框架中&#xff0c;如 Vue.js、Angular 等。下面我们将分别介绍 Vue.js 和 Angular 中的常用指令&#…

虚拟地址空间(下)进程地址空间(上)

一.关于页表组成 1.权限&#xff08;rwx) 作用&#xff1a;如1.让代码区变成只读的 2.写时拷贝的实现&#xff1a;子进程创建时其页表指向的父进程代码和数据权限都是只读的&#xff0c;子进程试图修改&#xff0c;触发错误&#xff0c;系统开始写时拷贝。 来源&#xff1a;…

【区块链 + 航运物流】丰溯 - 区块链溯源平台 | FISCO BCOS 应用案例

丰溯是顺丰科技推出的区块链溯源平台&#xff0c; 采用 FISCO BCOS 底层开源框架&#xff0c; 为农副食品、 冷链生鲜等企业客户及消费 者提供关键流通节点的溯源信息服务&#xff0c;形成从源头到消费者端全链路透明的信息链。 在商贸消费领域&#xff0c; 溯源一直是保障产品…

iwebsec-SQL数字型注入

1.判断是否存在漏洞 添加and 11发现正常显示&#xff0c;添加and 12无回显条目&#xff0c;则存在sql注入漏洞 2.因为有回显&#xff0c;尝试union联合注入&#xff0c;使用order by判断出有3个字段 3.使用union联合注入查看回显位&#xff0c;发现3三个字段均有回显&#xff…

蓝桥杯每日五题第一日

蓝桥杯每日5题 问题一 班级活动 1.班级活动 - 蓝桥云课 问题描述 小明的老师准备组织一次班级活动。班上一共有 nn 名 (nn 为偶数) 同学&#xff0c;老师想把所有的同学进行分组&#xff0c;每两名同学一组。为了公平&#xff0c;老师给每名同学随机分配了一个 nn 以内的正…

STM32 —— 嵌入式系统、通用计算机系统、物联网三层架构

目录 一、嵌入式系统的概念 二、通用计算机系统与嵌入式系统的比较 用途 硬件 软件 性能与功耗 开发与维护 三、嵌入式系统与物联网的关系 四、物联网的三层架构 1. 感知层&#xff08;Perception Layer&#xff09; 2. 网络层&#xff08;Network Layer&#xff09; …

卡码网25题——掌握ACM输入输出方式(15 至 18)

刷题小记&#xff1a; 本期涉及ACM模式下栈和链表的构建与使用&#xff0c;值得学习。 卡玛网15.神秘字符&#xff08;卡玛网15.神秘字符&#xff09; 题目分析&#xff1a; 若给定2行字符串&#xff0c;其中第一个串的长度为偶数&#xff0c;现要求把第二个串插入到第一个…

前端字段名和后端不一致?解锁 JSON 映射的“隐藏规则” !!!

&#x1f680; 前端字段名和后端不一致&#xff1f;解锁 JSON 映射的“隐藏规则” &#x1f31f; 嘿&#xff0c;技术冒险家们&#xff01;&#x1f44b; 今天我们要聊一个开发中常见的“坑”&#xff1a;前端传来的 JSON 参数字段名和后端对象字段名不一致&#xff0c;会发生…

python中使用单例模式在整个程序中只创建一个数据库连接,节省资源

示例代码&#xff1a; from loguru import logger from pymongo import MongoClient from pymongo.errors import ConnectionFailurefrom llm_engineering.settings import settingsclass MongoDatabaseConnector:_instance: MongoClient | None Nonedef __new__(cls, *args,…

AI小白的第六天:必要的数学知识(一)

在学习的过程中&#xff0c;不管是上代码还是理论学习&#xff0c;其中都掺杂了一些数学知识。俗话说“磨刀不误砍柴工”&#xff0c;而我已经“误了砍柴功”了&#xff0c;现在变成了“亡羊补牢&#xff0c;为时不晚”。 线性代数 线性代数是数学的一个分支&#xff0c;主要…

【Linux】Bash是什么?怎么使用?

李升伟 整理 什么是 Bash&#xff1f; Bash&#xff08;Bourne Again Shell&#xff09;是一种 命令行解释器&#xff08;Shell&#xff09;&#xff0c;广泛用于 Unix 和 Linux 操作系统。它是 Bourne Shell&#xff08;sh&#xff09; 的增强版&#xff0c;提供了更多的功能…