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

STM32F103 标准库介绍及PWM波控制LED亮度

STM32F103 标准库介绍及PWM波控制LED亮度

引言

STM32F103 系列微控制器(MCU)是意法半导体(STMicroelectronics)推出的一款高性能、低功耗的嵌入式芯片,广泛应用于各种嵌入式系统中。STM32F103 基于ARM Cortex-M3内核,具有丰富的外设接口和强大的处理能力。本文将介绍如何使用STM32F103的标准库生成PWM波,并通过PWM波控制LED的亮度。

标准库简介

STM32F103 的标准外设库(Standard Peripheral Library, SPL)是意法半导体提供的一组软件库,用于简化对STM32系列芯片外设的操作。SPL 提供了丰富的API函数,涵盖了GPIO、USART、I2C、SPI、TIM等常用外设,极大地方便了开发者进行快速开发。

硬件连接

在开始编写代码之前,我们需要连接硬件。假设我们使用STM32F103C8T6开发板,并将LED连接到PA8引脚。我们将通过PWM波来调节该LED的亮度。

软件开发环境

我们使用Keil uVision作为开发环境,并使用STM32标准外设库进行开发。需要下载并安装STM32F103标准外设库。

PWM波生成及控制LED亮度
  1. 初始化库和外设

首先,我们需要初始化标准库和时钟。然后,我们需要配置GPIO引脚为复用功能,以便它可以输出PWM波。

#include "stm32f10x.h"void RCC_Configuration(void)
{/* 使能时钟 */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_TIM1, ENABLE);
}void GPIO_Configuration(void)
{GPIO_InitTypeDef GPIO_InitStructure;/* 配置PA8为复用推挽输出 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);
}void TIM1_Configuration(void)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;/* 配置TIM1 */TIM_TimeBaseStructure.TIM_Period = 999; // 自动重装载寄存器值TIM_TimeBaseStructure.TIM_Prescaler = 71; // 预分频器TIM_TimeBaseStructure.TIM_ClockDivision = 0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);/* PWM模式配置 */TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse = 0; // 初始占空比TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;TIM_OC1Init(TIM1, &TIM_OCInitStructure);/* 使能TIM1 */TIM_Cmd(TIM1, ENABLE);/* 使能TIM1 PWM输出 */TIM_CtrlPWMOutputs(TIM1, ENABLE);
}
  1. 主函数

在主函数中,我们将上述配置函数依次调用,然后通过改变PWM占空比来控制LED的亮度。

int main(void)
{RCC_Configuration();GPIO_Configuration();TIM1_Configuration();while (1){for (uint16_t i = 0; i < 1000; i++){TIM_SetCompare1(TIM1, i); // 改变占空比for (volatile int j = 0; j < 10000; j++); // 延时}for (uint16_t i = 1000; i > 0; i--){TIM_SetCompare1(TIM1, i); // 改变占空比for (volatile int j = 0; j < 10000; j++); // 延时}}
}
代码解析
  1. RCC_Configuration:使能GPIOA和TIM1的时钟。
  2. GPIO_Configuration:配置PA8引脚为复用推挽输出。
  3. TIM1_Configuration:配置TIM1的时基和PWM模式,使能TIM1及其PWM输出。
  4. 主函数:在主循环中,通过改变TIM1的CCR1(捕获/比较寄存器)值来调整PWM波的占空比,从而控制LED的亮度。
总结

通过使用STM32F103的标准外设库,我们可以方便地生成PWM波,并通过PWM波的占空比控制LED的亮度。以上代码展示了从配置时钟、GPIO、TIM1到调节PWM波占空比的完整过程。这种方法不仅适用于控制LED,还可以用于其他需要PWM控制的场景,如电机控制等。希望本文对初学者理解和使用STM32F103标准库有所帮助。

相关文章:

  • CnosDB:深入理解时序数据质量函数
  • MFC GDI 绘图模式、映射模式、画笔、笔、字体
  • 题解:CF859C Pie Rules
  • tcpdump源码分析
  • Python数据分析实验四:数据分析综合应用开发
  • AWS安全性身份和合规性之IAM Identity Center(AWS Single Sign-On)
  • 民国漫画杂志《时代漫画》第13期.PDF
  • AI早班车5.25
  • 【EXCEL_VBA_基础知识】10 使用Dir函数合并多个文件数据
  • python冰雹序列的探索与编程实现
  • Restful API设计与使用:介绍什么是RESTful架构,以及如何在Spring Boot中设计和实现Restful API
  • Mybatis源码剖析---第二讲
  • 【Java面试】一、Redis篇(上)
  • 链表-设计LRU缓存结构
  • uni-app App端实现文字语音播报(Ba-TTS)
  • [译]Python中的类属性与实例属性的区别
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 5、React组件事件详解
  • Android框架之Volley
  • CentOS6 编译安装 redis-3.2.3
  • Django 博客开发教程 8 - 博客文章详情页
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • js 实现textarea输入字数提示
  • leetcode98. Validate Binary Search Tree
  • mysql innodb 索引使用指南
  • MySQL几个简单SQL的优化
  • PAT A1017 优先队列
  • SpiderData 2019年2月16日 DApp数据排行榜
  • Vue 2.3、2.4 知识点小结
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 从0到1:PostCSS 插件开发最佳实践
  • 对象管理器(defineProperty)学习笔记
  • 离散点最小(凸)包围边界查找
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 算法---两个栈实现一个队列
  • 我看到的前端
  • 线上 python http server profile 实践
  • 学习Vue.js的五个小例子
  • 以太坊客户端Geth命令参数详解
  • hi-nginx-1.3.4编译安装
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (超详细)语音信号处理之特征提取
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (黑马C++)L06 重载与继承
  • (六)vue-router+UI组件库
  • (四)linux文件内容查看
  • (四)软件性能测试