![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
单片机
文章平均质量分 77
各种单片机相关例程
wanglong3713
嵌入式软件
展开
-
51单片机看门狗定时器配置
单片机型号:STC8G1K08-38I-TSSOP20,其他型号请自行测试;原创 2024-06-27 22:27:53 · 99 阅读 · 0 评论 -
51单片机定时器中断配置
单片机型号:STC8G1K08-38I-TSSOP20,其他型号请自行测试;原创 2024-06-22 20:19:47 · 674 阅读 · 0 评论 -
实时时钟芯片DS1307单片机C语言驱动程序
DS1307是一款非易失性实时时钟(RTC)芯片,采用IIC总线接口进行通信,可以提供秒、分、时、日、月、年等时间和日期信息。DS1307还具有控制和配置寄存器,可以通过读写这些寄存器来设置和调整时间、日期和其他功能。主要特点如下:1.提供秒、分钟、小时、日、月、星期及年计时,带闰年补偿,有效期至2100年;2.56字节通用RAM,写次数不受限制;3. IIC串口通信;4. 可编程方波输出信号;5. 自动电源失效检测和切换电路;6. 电池备份模式下,振荡器运行功耗低于500nA;原创 2024-02-01 21:33:09 · 1421 阅读 · 0 评论 -
实时时钟芯片DS1302单片机C语言驱动程序
DS1302 是 DALLAS(达拉斯)公司推出的一款涓流充电时钟芯片。主要特点:1.可计算秒、分、时、日、日期、星期、月、年的能力,并有闰年补偿功能;2.内部含有31个字节静态RAM;3.采用串行数据传送方式,3线接口;4.与TTL兼容,Vcc=5V;5.时钟或RAM数据的读/写有两种传送方式:单字节传送和多字节传送方式;6.工作电压范围宽:2.0~5.5V;7.功耗低,2.0V时工作电流小于300nA。8.采用8脚DIP封装或SOIC封装。原创 2024-01-14 10:23:17 · 1828 阅读 · 2 评论 -
单片机RTC及时钟芯片的时间到底从哪一年起始?
1.文中用到的设备,初始年份大多为00年,即四位年份yyyy格式的后两位,且当作闰年处理,如果是指1970年的话,1970年不是闰年;无论是单片机还是RTC专用芯片,没有一个手册中提到1970年1月1日这个时间,因此,说RTC功能的起始时间是1970-01-01 00:00:00的,不准确,也没有依据;2.对于类似STM32F103C8T6这样,RTC功能只有一个计数器,没有年月日时分秒这种时间寄存器的,需要由软件算法配合来计时,起始时间可以任意;3。原创 2024-01-01 23:30:30 · 1830 阅读 · 0 评论 -
STM32单片机输出频率及占空比可调的PWM波
1.使用定时器的PWM输出模式,同一个定时器的不同通道输出的PWM频率必须相同,如果想要同时输出不同频率的PWM,则需要使用不同的定时器,或者使用同一个定时器的输出比较模式。2.PWM模式下,同一个定时器的不同通道,输出的PWM占空比可以不一样。原创 2023-12-16 21:57:07 · 8742 阅读 · 2 评论 -
用逻辑分析仪观察串口Uart数据波形
只讨论嵌入式编程中较为常用的异步串行接口(Universal Asynchronous Receiver/Transmitter, UART),TTL电平。串口的参数一般有:1.,数据传输速率,单位bps(bits per second),即每秒传输的位数,常见的波特率有9600bps、19200bps、115200bps等;如果波特率为115200bps,则传输一个bit的时间是1/115200s≈8.68us;2.原创 2023-11-02 21:08:40 · 1934 阅读 · 0 评论 -
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 评论 -
51单片机STC8G使用printf函数的方法
原来是因为Keil C51的printf函数与标准C语言的printf函数不同,可在keil的菜单“Help-μVision Help”的帮助文件中查看关于printf函数的介绍,在使用C51的printf函数打印%d/i/u/o/x/X格式时的数值时,需要指定该变量的存储格式l/L/b/B。测试程序,主频为为22.1184MHz,串口1配置为9600bps,打印“Hello World!可看出输出的并不是我们想要的数值0,1,2…,而是放大了256倍,②16位数据,格式为%hd;,其他型号请自行测试;原创 2023-03-11 19:50:12 · 2217 阅读 · 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 评论 -
x24Cxx系列EEPROM芯片C语言通用读写程序
在之前的3篇文章中,介绍了x24C01~x24C512的读写程序,相关文章如下:1.IIC驱动:4位数码管显示模块TM1637芯片C语言驱动程序2.AT24C01、AT24C02读写:AT24C01/AT24C02系列EEPROM芯片单片机读写驱动程序3.AT24C04、AT24C08、AT24C16读写:AT24C04、AT24C08、AT24C16系列EEPROM芯片单片机读写驱动程序4.AT24C32、AT24C64、AT24C128、AT24C256、AT24C512读写:AT24C32、A原创 2022-06-15 20:02:33 · 2643 阅读 · 8 评论 -
AT24C32、AT24C64、AT24C128、AT24C256、AT24C512系列EEPROM芯片单片机读写驱动程序
在前两篇博文中,分别记录了AT24C01、AT24C02,以及AT24C04、AT24C08、AT24C16芯片的读写驱动,先将之前的相关文章include一下:1.IIC驱动:4位数码管显示模块TM1637芯片C语言驱动程序2.AT24C01、AT24C02读写:AT24C01/AT24C02系列EEPROM芯片单片机读写驱动程序3.AT24C04、AT24C08、AT24C16读写:AT24C04、AT24C08、AT24C16系列EEPROM芯片单片机读写驱动程序本文将带来AT24C32、AT原创 2022-06-01 20:11:39 · 20763 阅读 · 18 评论 -
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 评论 -
常用距离计算单片机C语言程序
一、欧几里得距离(Euclidean Distance)1.定义欧氏距离,即空间中两点的直线距离,设空间中X的坐标为Y的坐标为X与Y之间的欧式距离为2.C语言程序/******************************************************************************* * 函数名:EuclideanDistance * 功 能:计算空间中两个点的欧几里得距离 * 参 数:*u16DataA点A的坐标,数组 *u16Da原创 2022-01-12 20:33:16 · 1153 阅读 · 0 评论 -
瑞萨RL78系列单片机CS+(Cube Suite+)下重定向printf函数
一、测试环境瑞萨Cube Suite+ for CA,CX,Build Tool: CA78K0R,芯片:RL/78系列R5F100FF(其他版本软件、芯片请自行测试)各版本如下图:二、代码1.改写putchar函数/******************************************************************************* * 函数名:putchar * 功 能:改写putchar函数 * 参 数:无 * 返回值:无原创 2022-01-11 22:13:57 · 2254 阅读 · 7 评论 -
在瑞萨CS+(Cube Suite+)使用中文注释及中文字符串的方法
一、测试环境瑞萨Cube Suite+ for CA,CX V4.00.00,其他请自行测试。二、设置1.在菜单Tool中,选中Options,在弹出的窗口中,进行如下图的设置:2.按下图步骤,在工程的Build Tool处右键,在“Kanji character code of source”处选择“ECU_JP(-ze)”...原创 2022-01-11 21:57:06 · 2040 阅读 · 0 评论 -
瑞萨Ez-cube仿真器引脚与4线接口对应关系
瑞萨仿真器Ez-cube有8个引脚,如下图,但在实际使用中,可能仅需要连接4个引脚至MUC端,对应关系如下表:仅需要1、2、3、8脚,其中1、3分别为地和电源,2接Reset,8接Tool0。原创 2022-01-11 21:47:25 · 2790 阅读 · 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 评论 -
PSoC开发环境下重定向printf函数
一、适用环境IDE: PSoC Creator 4.3ToolChain: ARM GCC 5.4-2016-q2-update(Cypress provided)二、代码添加以下代码,即可调用printf函数打印输出想要的信息:int _write(int file, char *ptr, int len){ int i; file = file; for (i = 0; i < len; i++) { SW_Tx_UART_De原创 2021-11-06 18:01:10 · 528 阅读 · 0 评论