- 博客(37)
- 资源 (3)
- 收藏
- 关注
原创 瑞萨RL78/G13单片机R5F100FE内部RTC驱动程序
使用单片机为R5F100FE,IDE为CS+ for CA,CX V4.00.00,编译工具为CA78K0R。瑞萨RL78/G13系列芯片没有外接电池的引脚,没有后备寄存器,因此在系统断电后无法保存时间;如果要实现断电后RTC继续计时,必须通过其他方式给系统切换供电,否则上电会将RTC时间也初始化;因此,该系列芯片的RTC功能用来做实时时钟的话,功能不全,但用来做中断,唤醒STOP模式,会比较好用。
2024-05-16 20:04:02 1063
原创 字节按位前后反转C语言程序
一个字节可表示的数据只有256种,如果将0x00~0xFF按位反转的值做成表格,使用查表法,则效率更高了。uint16_t i;for (i = 0;i < 0x0100;i++)
2024-04-05 11:19:35 1038
原创 实时时钟芯片DS1307单片机C语言驱动程序
DS1307是一款非易失性实时时钟(RTC)芯片,采用IIC总线接口进行通信,可以提供秒、分、时、日、月、年等时间和日期信息。DS1307还具有控制和配置寄存器,可以通过读写这些寄存器来设置和调整时间、日期和其他功能。主要特点如下:1.提供秒、分钟、小时、日、月、星期及年计时,带闰年补偿,有效期至2100年;2.56字节通用RAM,写次数不受限制;3. IIC串口通信;4. 可编程方波输出信号;5. 自动电源失效检测和切换电路;6. 电池备份模式下,振荡器运行功耗低于500nA;
2024-02-01 21:33:09 2036
原创 实时时钟芯片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 2213 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 2261
原创 BCD码与十进制数转换C语言程序
BCD码(Binary-Coded Decimal),也称为二-十进制代码,是一种将十进制数转换为二进制数的编码方式,用4位二进制数来表示1位十进制数中的0~9这10个数码。BCD码使用四个位Bit来储存一个十进制的数码,使二进制和十进制之间的转换转换变得非常快捷和简单。
2023-12-26 20:27:20 2476
原创 STM32单片机输出频率及占空比可调的PWM波
1.使用定时器的PWM输出模式,同一个定时器的不同通道输出的PWM频率必须相同,如果想要同时输出不同频率的PWM,则需要使用不同的定时器,或者使用同一个定时器的输出比较模式。2.PWM模式下,同一个定时器的不同通道,输出的PWM占空比可以不一样。
2023-12-16 21:57:07 11374 4
原创 C语言求数组中出现次数最多的元素
1、程序不考虑时间和空间复杂度,并不一定是最优的算法,只是流程简单,易于理解;2、该方法利用了数组的下标当作与元素对应的值,因此只适用于数组元素为非负整数的情况;3、输入数组的长度任意,新建的数组为变长数组,所以要用C99的标准;4、新建的数组下标当作元素的值,实际相当于给输入数组进行了排序,所以找到第1个最大值,跳出循环,如果有出现次数相同的元素,则返回较小元素;
2023-11-13 19:58:55 3569 1
原创 用逻辑分析仪观察串口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 2736
原创 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 3370
原创 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 2568
原创 STM32单片机Keil MDK重定向printf函数
在项目开发中,使用printf函数通过串口打印调试信息,需要对printf函数进行改写,重定向到使用的串口号,该例中使用单片机STM32F103C8T6进行试验,工程文件使用STM32CubeMX生成,开发环境是Keil MDK,使用了HAL库。IAR环境下重定向printf函数可参考。
2023-02-23 21:22:23 1567 1
原创 PID算法C语言程序STM32单片机控制水温实验(二、积分项改进)
该水温控制系统,传统PID与改进PID效果差不多,可能是因为该系统过于简单;另外P、I、D参数选取未经过大量实验,可能不是最优的,本例中的积分I参数非常小,所以积分项的改进效果不明显,但目的在于总结积分项的改进方法与C语言实现。有兴趣的可以试验整定参数,达到更好的效果。如有错漏之处,欢迎指正。
2022-10-24 20:19:00 3814 4
原创 STM32单片机使用ADC功能驱动手指检测心跳模块
1.实际测试发现,该模块环境影响较大,白天、夜晚,开灯、关灯都会对数据有很大影响,且数据经常会漂移;2.只是读取了数据,做了简单滤波,从时域图中,找不出什么规律;3.如果只是用来学习ADC的使用,可以使用本模块练手,也可用这些数据来学习滤波算法、傅里叶变换等,但是想用来比较精准的检测心跳,还是不推荐。httpshttpshttpshttps。...
2022-07-23 00:13:17 1896 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 2997 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 23957 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 14452
原创 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 12454 11
原创 PID算法C语言程序STM32单片机控制水温实验(一、位置型PID)
一、概述实验所用器材均为容易买到的设备,主要有STM32F103C8T6最小系统板、DS18B20温度传感器、继电器模块、TM1638显示模块、电加热棒(12V/80W)、直流电源适配器(12V/10A),再找一个小一些的玻璃杯(水250ml),所有设备如下图。二、系统功能由于采用普通继电器控制加热棒,继电器不允许频繁启停,因此将控制周期设为1min,即每1min计算一次当前1min内电加热棒需要开启的时间(占周期的百分比),通过控制每一个控制周期内电加热棒的开启时间,使水温在设定温度附近恒定;因温
2022-03-31 23:09:44 15858 14
原创 DS18B20温度传感器单片机C语言驱动程序
一、概述代码参考了正点原子的例程,并经过测试,开发环境:IAR单片机:STM32F103C8T6二、代码/******************************************************************************* * 函数名:Port_SetMode * 功 能:GPIO设置输入或输出模式 * 参 数:*GPIOx 引脚组号 GPIO_Pin引脚号 u32Mode输入或输出模式 * 返回值:无 * 说 明:无
2022-01-14 22:56:23 2153
原创 TM1638数码管显示板(8数码管+16按键)单片机C语言驱动程序(按键功能)
一、概述在中,记录了TM1638显示板的显示功能,本文分享该显示板的按键的读取。二、原理图分析如上图,16个按键,每个按键的一端连接TM1638的K1、K2,另一端连接SGn,即KSn。再看手册(手册下载数码管显示板驱动芯片TM1638数据手册中关于按键扫描的部分:与8按键8数码管8LED的显示板不同的是,该显示板可以有组合按键,那在写读按键程序的时候,返回的按键可以不是一个独立的按键,所以可以采用一个两个字节的数据,每一位代表一个按键,正好可以存储16个按键的值。三、主要代码1. 按键
2022-01-14 22:53:51 3642
原创 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 9205 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 6293 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 1389
原创 常用距离计算单片机C语言程序
一、欧几里得距离(Euclidean Distance)1.定义欧氏距离,即空间中两点的直线距离,设空间中X的坐标为Y的坐标为X与Y之间的欧式距离为2.C语言程序/******************************************************************************* * 函数名:EuclideanDistance * 功 能:计算空间中两个点的欧几里得距离 * 参 数:*u16DataA点A的坐标,数组 *u16Da
2022-01-12 20:33:16 1214
原创 瑞萨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 2433 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 2221
原创 瑞萨Ez-cube仿真器引脚与4线接口对应关系
瑞萨仿真器Ez-cube有8个引脚,如下图,但在实际使用中,可能仅需要连接4个引脚至MUC端,对应关系如下表:仅需要1、2、3、8脚,其中1、3分别为地和电源,2接Reset,8接Tool0。
2022-01-11 21:47:25 2926
原创 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 9762 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 19114 23
原创 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 558
原创 STM32单片机使用KNN算法实现鸢尾花分类
一、概述最近在利用业余时间学习机器学习算法,由于笔者是嵌入式软件工程师,想将机器学习算法在单片机端实现,KNN算法(k-Nearest Neighbor,K最近邻算法)是为数不多的可在单片机端实现的机器学习算法。通过检索发现,在单片机端实现KNN算法的例子较少,仅有几个用单片机实现手写数字识别的。本例程硬件使用的是STM32F103C8T6最小系统板,IAR开发环境,STM32CubeMX进行配置并生成工程文件,鸢尾花数据集是从UCI机器学习官网https://archive.ics.uci.edu/
2021-10-24 01:41:40 5070 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 3149 1
原创 通用定时器实现STM32单片机微秒级延时函数
一、前言在实际应用中,经常用到延时函数,而HAL库的延时函数是毫秒级的,虽然可以自行修改,但该函数使用的地方较多,修改不慎可能会引起其他问题,所以本文使用一个定时器,实现微秒级精确延时,不影响其他使用。该方法使用STMCubeMX配置,基本适用于所有STM32系列芯片。二、STMCubeMX配置1. 时钟配置我们使用TIM3实现延时函数,首先看手册中,TIM3是挂在APB1上的在STM32CubeMX中,配置完时钟频率,找到APB1的定时器的频率。本例中为48MHz。2.定时器配置定时器
2021-10-04 18:11:18 5672 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 3003
breast_cancer_wisconsin(diagnostic).rar
2022-01-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人