当前位置: 首页 > article >正文

嵌入式开发之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的配置、操作技巧以及在开发中的最佳实践!下节见!

相关文章:

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

基于STM32F103C8T6的开发实践——从入门到精通01 1. 引言 STM32系列微控制器是STMicroelectronics推出的一款高性能、低功耗的32位微控制器&#xff0c;广泛应用于嵌入式系统中。STM32F103C8T6是其中非常受欢迎的一款&#xff0c;凭借其强大的性能、丰富的外设接口和低廉的价格…...

K8S学习之基础三十五:k8s之Prometheus部署模式

Prometheus 有多种部署模式&#xff0c;适用于不同的场景和需求。以下是几种常见的部署模式&#xff1a; 1. 单节点部署 这是最简单的部署模式&#xff0c;适用于小型环境或测试环境。 特点&#xff1a; 单个 Prometheus 实例负责所有的数据采集、存储和查询。配置简单&…...

AI驱动的视频字幕提取与翻译工具

青梧字幕是一款基于Whisper技术的AI字幕提取工具&#xff0c;专为视频制作者、翻译人员和自媒体创作者设计。它通过先进的语音识别算法&#xff0c;能够自动从视频文件中提取字幕内容&#xff0c;并支持多种语言和字幕格式&#xff0c;极大地简化了字幕制作流程。 目前暂支持 …...

Android ARouter的详细使用指南

Android ARouter的详细使用指南。我需要先确定用户的基础&#xff0c;可能他们已经有Android开发经验&#xff0c;但对ARouter不太熟悉。首先&#xff0c;我应该介绍ARouter是什么&#xff0c;解决什么问题&#xff0c;比如模块化中的页面跳转问题。然后&#xff0c;需要分步骤…...

【MySQL】MySQL审计工具Audit Plugin安装使用

MySQL审计工具Audit Plugin安装使用 https://www.cnblogs.com/waynechou/p/mysql_audit.html MySQL 5.6 开启审计功能 https://blog.51cto.com/u_15127556/4344503 MySQL之添加日志审计功能 https://blog.csdn.net/weixin_43279032/article/details/105507170 MySQL开启日志记录…...

游戏引擎学习第163天

我们可以在资源处理器中使用库 因为我们的资源处理器并不是游戏的一部分&#xff0c;所以它可以使用库。我说过我不介意让它使用库&#xff0c;而我提到这个的原因是&#xff0c;今天我们确实有一个选择——可以使用库。 生成字体位图的两种方式&#xff1a;求助于 Windows 或…...

JVM常用概念之锁省略

问题 synchronized(同步-重量级锁)会解除所有编译器优化吗? 基础知识 使用当前的 Java 内存模型&#xff0c;未观察到的锁不一定会产生任何内存效应。除其他情况外&#xff0c;这意味着对非共享对象进行同步是徒劳的&#xff0c;因此运行时不必在那里做任何事情。这给编译优…...

用python代码将excel中的数据批量写入Json中的某个字段,生成新的Json文件

需求 需求&#xff1a; 1.将execl文件中的A列赋值给json中的TrackId&#xff0c;B列赋值给json中的OId 要求 execl的每一行&#xff0c;对应json中的每一个OId json 如下&#xff1a; {"List": [{"BatchNumber": "181-{{var}}",// "Bat…...

《我的Python觉醒之路》之转型Python(十五)——控制流

[今天是2025年3月17日&#xff0c;继续复习第一章节、第二章节的内容 ] 《我的Python觉醒之路》之转型Python&#xff08;十四&#xff09;——控制流...

路由器与防火墙配置命令

路由器与防火墙配置命令 小明啊&#xff0c;你不是学计算机的嘛&#xff0c;叔叔家的路由器坏了&#xff0c;可以过来帮叔叔看看吗 命令可以用缩写&#xff0c;造就一堆容易造成歧义的缩写&#xff0c;比如add是address的缩写&#xff0c;sh是shutdown的缩写。 默认为Cisco路…...

PosterRender 实现微信下程序 分享商品生成海报

PosterRender 是什么 PosterRender 是一种专注于生成高质量海报图像的技术或工具&#xff0c;常用于生成静态图片&#xff0c;特别是适合用于营销、宣传和展示的图形设计。它通常用于在服务端或客户端渲染复杂的图像&#xff0c;包括文字、图形、图标、背景等&#xff0c;生成…...

C语言及内核开发中的回调机制与设计模式分析

在C语言以及操作系统内核开发中,回调机制是一种至关重要的编程模式。它通过注册框架和定义回调函数,实现了模块间的解耦和灵活交互,为系统的扩展性和可维护性提供了有力支持。本文将深入探讨这种机制的工作原理、应用场景以及与设计模式的关联。 一、回调机制的核心概念 (…...

第27周JavaSpringboot git初识

Git 课程笔记 一、Git 的介绍 1. Git 的诞生背景 Git 是 Linux 内核的作者 Linus Torvalds 为了更好地管理 Linux 内核开发而创建的版本控制系统。在 Linux 内核开发初期&#xff0c;由于开发者众多&#xff0c;协作成本很高&#xff0c;后来使用了 BitKeeper 工具来辅助协作…...

代码随想录算法训练营第34天 | 62.不同路径 63. 不同路径 II 整数拆分 不同的二叉搜索树 (跳过)

62.不同路径 62. 不同路径 - 力扣&#xff08;LeetCode&#xff09; 本题大家掌握动态规划的方法就可以。 数论方法 有点非主流&#xff0c;很难想到。 代码随想录 视频讲解&#xff1a;动态规划中如何初始化很重要&#xff01;| LeetCode&#xff1a;62.不同路径_哔哩哔哩_b…...

Java使用JDBC连接操作Sqlite 笔记250314

Java使用JDBC连接操作Sqlite 以下是使用 Java JDBC 连接和操作 SQLite 数据库的详细步骤&#xff1a; 1. 添加 SQLite JDBC 驱动 在项目中引入 SQLite JDBC 驱动依赖。 Maven 项目在 pom.xml 中添加&#xff1a;<dependency><groupId>org.xerial</groupId>…...

消息队列导致数据库数据读取不一致解决方案

我使用的是在数据库添加一个版本字段&#xff0c;记录版本&#xff0c;保证版本一致性&#xff0c;就能保证每次读取的是需要的内容。 具体问题&#xff1a;使用消息队列时&#xff0c;发送方给接收方发送消息&#xff0c;接收方修改了数据库的同时发送方查询数据库&#xff0…...

如何利用 Zeabur 实现 OceanBase 的一键部署

引言 Zeabur 是一个功能强大且即开即用的自动化部署平台&#xff0c;它不仅能迅速部署多种应用&#xff0c;还支持一键安装 MySQL、PostgreSQL 等数据库服务。 Zeabur 拥有众多国内外用户&#xff0c;如 AFFiNE、Bytebase 等企业客户&#xff0c;以及大量全栈和独立开发者。将…...

计算机网络进化论:从比特流到量子通信的深层解构

第一章 物理媒介与链路层(1960-1970) 1.1 比特流物理编码 // 曼彻斯特编码实现 vector<bool> manchester_encode(uint8_t byte) {vector<bool> bits;for(int i=7; i>=0; --i) {bool bit = (byte >> i) & 1;bits.push_back(bit); // 前半周期bits…...

超参数优化算法:scikit-opt库、Scikit-Optimize库

1 scikit-opt库&#xff1a;https://www.cnblogs.com/luohenyueji/p/18333387 https://blog.csdn.net/weixin_45750972/article/details/124683402 a 差分进化算法 (Differential Evolution)&#xff1a;一种基于群体搜索的优化算法&#xff0c;通过模拟生物进化的过程来寻找最…...

go语言学习教程推荐,零基础到做项目

一、基础入门阶段 官方教程&#xff08;免费&#xff09; • A Tour of Go&#xff1a;交互式入门教程&#xff0c;边学边练 • Go by Example&#xff1a;通过300代码片段学习语法 入门书籍 • &#x1f4d8;《Go语言圣经》中文版&#xff08;免费在线阅读&#xff09;&#…...

【商城实战(30)】从0到1搭建商城数据分析功能,开启数据驱动增长引擎

【商城实战】专栏重磅来袭&#xff01;这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建&#xff0c;运用 uniapp、Element Plus、SpringBoot 搭建商城框架&#xff0c;到用户、商品、订单等核心模块开发&#xff0c;再到性能优化、安全加固、多端适配&#xf…...

(hash表+vector 数位和相等数对的最大和)leetcode 2342

一定要断点调试看看数据对不对的上&#xff01;&#xff01;&#xff01;不然很容易弄不清楚值和下标 这个题意思是在nums中找出相同数位和的值 如 数位和为7 nums中符合要求的有 43&#xff0c;7 在这些数中选两个相加取最大值&#xff0c;再与其他数位和取得的相加最大值比…...

c++中字符串string常用的函数

在C中&#xff0c; std::string 类有许多常用函数&#xff0c;以下是一些常见的&#xff1a; 1. length() 或 size() &#xff1a;返回字符串的长度&#xff08;字符个数&#xff09;&#xff0c;二者功能相同。例如&#xff1a; #include <iostream> #include <str…...

NO.39十六届蓝桥杯备战|结构体八道练习|加号小于号运算符重载|自定义排序(C++)

加号运算符重载_牛客题霸_牛客网 #include <iostream> using namespace std;class Time {public:int hours; // 小时int minutes; // 分钟Time() {hours 0;minutes 0;}Time(int h, int m) {this->hours h;this->minutes m;}void show() {cout <<…...

kmp报错→Cannot find skiko-windows-x64.dll.sha256

1、前言 学习kmp&#xff08;Kotlin MultiPlatform简称&#xff09;过程中报了错误&#xff0c;这个报错在直接运行desktop的main方法才会出现&#xff0c;用gradle运行却不会报错&#xff0c;新建的kmp项目也不会出现&#xff0c;我学习的写了一些代码的项目才会出现。   运…...

Cocos Creator Shader入门实战(四):预处理宏定义和Chunk

引擎&#xff1a; 3.8.5 您好&#xff0c;我是鹤九日&#xff01; 回顾 学习Shader&#xff0c;前期是让人烦躁无味的&#xff0c;后期可能就是各种的逻辑让人抓耳挠腮。 一成不变的内容&#xff1a;遵循引擎设定的规则&#xff0c;理解引擎要求的规范。 这里&#xff0c;简单…...

K8S快速部署

前置虚拟机环境正式部署BUG解决 前置虚拟机环境 每个虚拟机配置一次就好 #关闭防火墙 systemctl stop firewalld systemctl disable firewalld #关闭 selinux sed -i s/enforcing/disabled/ /etc/selinux/config # 永久 setenforce 0 # 临时 #关闭 swap swapoff -a # 临时 vi…...

汽车PKE无钥匙进入系统一键启动系统定义与原理

汽车智能钥匙&#xff08;PKE无钥匙进入系统&#xff09;一键启动介绍 系统定义与原理 汽车无钥匙进入系统&#xff0c;简称PKE&#xff08;Passive Keyless Entry&#xff09;&#xff0c;该系统采用了RFID无线射频技术和车辆身份编码识别系统&#xff0c;率先应用小型化、小…...

使用 VLOOKUP 和条件格式在 Excel 中查找并标红匹配的串号

使用 VLOOKUP 和条件格式在 Excel 中查找并标红匹配的串号 你的步骤非常详细且清晰&#xff0c;能够帮助用户在 Excel 中通过 VLOOKUP 和条件格式来查找并标红匹配的串号。以下是对你提供的步骤的简要总结和补充说明&#xff1a; 1. 添加“是否匹配”列 在 a.xlsx 中新增一列…...

WPF程序使用AutoUpdate实现自动更新

AutoUpdate.NET使用 一、AutoUpdater.NET 简介 AutoUpdater.NET 是一个开源库&#xff0c;支持从各种源&#xff08;如GitHub、FTP、HTTP服务器等&#xff09;下载并安装更新。它提供了灵活的配置选项&#xff0c;允许开发者根据需求定制更新检查逻辑和用户体验。 二、安装 …...