![](https://img-blog.csdnimg.cn/0f27abb3f89d4da6b4f7d0f89627fc29.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
STM32
文章平均质量分 81
STM32单片机相关内容
wanglong3713
嵌入式软件
展开
-
STM32单片机输出频率及占空比可调的PWM波
1.使用定时器的PWM输出模式,同一个定时器的不同通道输出的PWM频率必须相同,如果想要同时输出不同频率的PWM,则需要使用不同的定时器,或者使用同一个定时器的输出比较模式。2.PWM模式下,同一个定时器的不同通道,输出的PWM占空比可以不一样。原创 2023-12-16 21:57:07 · 8742 阅读 · 2 评论 -
STM32F103单片机内部RTC实时时钟驱动程序
STM32F103系列的RTC模块,没有年月日及时间寄存器,只有一个32位计数器,每1秒加1,没有年月日及时间寄存器,需要软件配合,才能实现日历、时钟功能;由于只有计数功能,可以任意时间作为基准时间(即开始时间),用UTC时间戳(以1970年1月1日00:00:00为开始时间),可以使程序通用性更强;以上UTCToUnix和UnixToUTC两个函数是以标准UTC时间为基础的,实际北京时间为UTC+8,相差8个小时,如果需要计算北京时间,需要加8个小时;水平有限,以上如有疏漏之处,欢迎指正。原创 2023-10-24 20:38:20 · 2772 阅读 · 0 评论 -
STM32单片机Keil MDK重定向printf函数
在项目开发中,使用printf函数通过串口打印调试信息,需要对printf函数进行改写,重定向到使用的串口号,该例中使用单片机STM32F103C8T6进行试验,工程文件使用STM32CubeMX生成,开发环境是Keil MDK,使用了HAL库。IAR环境下重定向printf函数可参考。原创 2023-02-23 21:22:23 · 1498 阅读 · 1 评论 -
PID算法C语言程序STM32单片机控制水温实验(二、积分项改进)
该水温控制系统,传统PID与改进PID效果差不多,可能是因为该系统过于简单;另外P、I、D参数选取未经过大量实验,可能不是最优的,本例中的积分I参数非常小,所以积分项的改进效果不明显,但目的在于总结积分项的改进方法与C语言实现。有兴趣的可以试验整定参数,达到更好的效果。如有错漏之处,欢迎指正。原创 2022-10-24 20:19:00 · 3670 阅读 · 4 评论 -
STM32单片机使用ADC功能驱动手指检测心跳模块
1.实际测试发现,该模块环境影响较大,白天、夜晚,开灯、关灯都会对数据有很大影响,且数据经常会漂移;2.只是读取了数据,做了简单滤波,从时域图中,找不出什么规律;3.如果只是用来学习ADC的使用,可以使用本模块练手,也可用这些数据来学习滤波算法、傅里叶变换等,但是想用来比较精准的检测心跳,还是不推荐。httpshttpshttpshttps。...原创 2022-07-23 00:13:17 · 1802 阅读 · 1 评论 -
AT24C04、AT24C08、AT24C16系列EEPROM芯片单片机读写驱动程序
一、概述在之前的一篇博文中,记录了AT24C01、AT24C02芯片的读写驱动,先将之前的相关文章include一下:1.IIC驱动:4位数码管显示模块TM1637芯片C语言驱动程序2.AT24C01/AT24C02读写:AT24C01/AT24C02系列EEPROM芯片单片机读写驱动程序本文记录分享AT24C04、AT24C08、AT24C16芯片的单片机C语言读写驱动程序。二、芯片对比介绍型号容量bit容量byte页数字节/页器件寻址位可寻址器件数WordAddress原创 2022-05-22 12:22:52 · 13053 阅读 · 0 评论 -
AT24C01/AT24C02系列EEPROM芯片单片机读写驱动程序
一、概述EEPROM是嵌入式开发中比较常用的芯片,用来保存参数及掉电记忆的数据等,最常用的是ATMEL的AT24Cxx系列的IIC接口,也有其他厂家的如罗姆Rohm的BR24Gxx系列、ST的M24Cxx系列等。该系列芯片容量不等,如AT24C01即为1kbit,AT24C02为2kbit…本文记录AT24C01/AT24C02的读写驱动。用到的IIC总线读写驱动可参考本人的另一篇博文4位数码管显示模块TM1637芯片C语言驱动程序。二、芯片介绍型号容量bit容量byte页数字节/原创 2022-05-04 23:01:29 · 11423 阅读 · 11 评论 -
PID算法C语言程序STM32单片机控制水温实验(一、位置型PID)
一、概述实验所用器材均为容易买到的设备,主要有STM32F103C8T6最小系统板、DS18B20温度传感器、继电器模块、TM1638显示模块、电加热棒(12V/80W)、直流电源适配器(12V/10A),再找一个小一些的玻璃杯(水250ml),所有设备如下图。二、系统功能由于采用普通继电器控制加热棒,继电器不允许频繁启停,因此将控制周期设为1min,即每1min计算一次当前1min内电加热棒需要开启的时间(占周期的百分比),通过控制每一个控制周期内电加热棒的开启时间,使水温在设定温度附近恒定;因温原创 2022-03-31 23:09:44 · 15077 阅读 · 11 评论 -
DS18B20温度传感器单片机C语言驱动程序
一、概述代码参考了正点原子的例程,并经过测试,开发环境:IAR单片机:STM32F103C8T6二、代码/******************************************************************************* * 函数名:Port_SetMode * 功 能:GPIO设置输入或输出模式 * 参 数:*GPIOx 引脚组号 GPIO_Pin引脚号 u32Mode输入或输出模式 * 返回值:无 * 说 明:无原创 2022-01-14 22:56:23 · 2095 阅读 · 0 评论 -
TM1638数码管显示板(8数码管+16按键)单片机C语言驱动程序(按键功能)
一、概述在中,记录了TM1638显示板的显示功能,本文分享该显示板的按键的读取。二、原理图分析如上图,16个按键,每个按键的一端连接TM1638的K1、K2,另一端连接SGn,即KSn。再看手册(手册下载数码管显示板驱动芯片TM1638数据手册中关于按键扫描的部分:与8按键8数码管8LED的显示板不同的是,该显示板可以有组合按键,那在写读按键程序的时候,返回的按键可以不是一个独立的按键,所以可以采用一个两个字节的数据,每一位代表一个按键,正好可以存储16个按键的值。三、主要代码1. 按键原创 2022-01-14 22:53:51 · 3360 阅读 · 0 评论 -
TM1638数码管显示板(8数码管+16按键)单片机C语言驱动程序(显示功能)
一、概述模块如下图,8位共阳数码管,16个按键,8个led灯。笔者采用的MCU是STM32F103C8T6,IAR开发环境,使用了HAL库。二、源代码该模块的大部分驱动程序与另一款TM1638驱动的8个数码管、8个LED、8个按键的显示板的程序一致,该模块驱动程序见TM1638显示板(8数码管+8LED+8按键)驱动程序(显示功能)2.1 端口设置函数/**********************************************************************原创 2022-01-13 22:07:14 · 8606 阅读 · 2 评论 -
TM1638驱动显示板(8数码管+8LED+8按键)单片机C语言程序(按键功能)
一、概述上一篇文章记录了TM1638驱动的显示模块的显示功能C语言程序,详见TM1638显示板(8数码管+8LED+8按键)驱动程序(显示功能),本文分享按键的驱动,以及按键的去抖动等操作。模块如下图:笔者采用的MCU是STM32F103C8T6,IAR开发环境,使用了HAL库。二、驱动程序1. 硬件分析首先,通过上图,可以看出按键是连接到K3上的;再看上图手册中对按键功能的描述,可知所有按键连接到同一个K引脚上,不能实现组合按键,按键仅能单个使用。读取按键的4个BYTE时,我们需要把K原创 2022-01-13 20:51:51 · 5774 阅读 · 4 评论 -
STM32单片机C语言程序使用KNN算法对乳腺肿瘤分类
一、概述之前在《STM32单片机使用KNN算法实现鸢尾花分类》中使用了KNN算法对鸢尾花进行分类,程序采用C语言编写,运行于STM32F103单片机上,效果较好。本篇文章将采用KNN算法对乳腺肿瘤进行分类,看看单片机处理高维数据的表现。数据来自于UCI,下载地址https://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+%28Diagnostic%29,整理好的数据已上传到资源breast_cancer_wisconsin(diagnos原创 2022-01-12 20:36:05 · 944 阅读 · 0 评论 -
TM1638显示板(8数码管+8LED+8按键)驱动程序(显示功能)
一、概述之前记录过TM637数码管显示模块的驱动C语言程序(详见4位数码管显示模块TM1637芯片C语言驱动程序),本文分享一下天微电子的另一款数码管按键驱动芯片TM1638的单片机C语言驱动程序。模块如下图,8位共阴数码管,8个按键,8个led灯,某宝、某多价格10元以内。笔者采用的MCU是STM32F103C8T6,IAR开发环境,使用了HAL库。二、源代码2.1二级标题三级标题...原创 2021-11-26 23:11:32 · 8937 阅读 · 8 评论 -
4位数码管显示模块TM1637芯片C语言驱动程序
一、概述TM1637 是一种带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU 数字接口、数据锁存器、LED 高压驱动、键盘扫描等电路。芯片手册已上传到资源,需要的可以下载,链接https://download.csdn.net/download/wanglong3713/40836173。使用的显示模块在某宝、某多价格很便宜,4位数码管,带时间点,适合做电子时钟,另外还有不带时间点的,使用的芯片是GN1637,还有AIP1637,实际与TM1637通用,驱动程序也可以通用。原创 2021-11-15 23:55:20 · 18007 阅读 · 22 评论 -
STM32单片机使用KNN算法实现鸢尾花分类
一、概述最近在利用业余时间学习机器学习算法,由于笔者是嵌入式软件工程师,想将机器学习算法在单片机端实现,KNN算法(k-Nearest Neighbor,K最近邻算法)是为数不多的可在单片机端实现的机器学习算法。通过检索发现,在单片机端实现KNN算法的例子较少,仅有几个用单片机实现手写数字识别的。本例程硬件使用的是STM32F103C8T6最小系统板,IAR开发环境,STM32CubeMX进行配置并生成工程文件,鸢尾花数据集是从UCI机器学习官网https://archive.ics.uci.edu/原创 2021-10-24 01:41:40 · 4940 阅读 · 6 评论 -
STM32单片机驱动全彩LED模块遍历百万种颜色
一、使用硬件分享一个趣味的实验,单片机PWM驱动全彩LED模块,快速遍历100万种颜色。单片机为STM32F103C8T6,三色LED模块如下图(图片来源于网络)二、STM32CubeMx配置配置TIM3的PWM通道1、2、3,对应引脚分别为PA6、PA7、PB0,这里的计数周期根据自己的时钟频率配置,我这里配置的PWM频率为2KHz,计算方法为,时钟频率48MHz,48分频即图中PSC的值为48-1=47为1MHz,计数周期即图中Counter Period(自动重装寄存器ARR的值)为500-原创 2021-10-16 18:26:28 · 3037 阅读 · 1 评论 -
通用定时器实现STM32单片机微秒级延时函数
一、前言在实际应用中,经常用到延时函数,而HAL库的延时函数是毫秒级的,虽然可以自行修改,但该函数使用的地方较多,修改不慎可能会引起其他问题,所以本文使用一个定时器,实现微秒级精确延时,不影响其他使用。该方法使用STMCubeMX配置,基本适用于所有STM32系列芯片。二、STMCubeMX配置1. 时钟配置我们使用TIM3实现延时函数,首先看手册中,TIM3是挂在APB1上的在STM32CubeMX中,配置完时钟频率,找到APB1的定时器的频率。本例中为48MHz。2.定时器配置定时器原创 2021-10-04 18:11:18 · 5475 阅读 · 2 评论 -
STM32单片机IAR环境下重定向printf函数
STM32单片机IAR环境下重定向printf函数一、引言在项目开发中,使用printf函数通过串口打印调试信息,需要对printf函数进行改写,重定向到使用的串口号,该例中使用的单片机是STM32F103C8T6,工程文件使用STM32CubeMX生成,开发环境是IAR,使用了HAL库。关键词:STM32,IAR,printf重定向二、工程配置1. 使能Usart在STM32CubeMx中使能需要的串口,本例使用Usart3,配置如下图:2.修改库文件配置在IAR中,选择菜单Projec原创 2021-10-01 00:01:09 · 2749 阅读 · 0 评论