STM32编程技巧
文章平均质量分 55
小灰灰搞电子
这个作者很懒,什么都没留下…
展开
-
stm32驱动HX711称重传感器 c++代码分享
HX711模块具有一对不平衡式差分输入端,可以通过将感应器连接到这对输入端来测量称重传感器的变化。HX711模块通常被广泛应用于电子秤、压力传感器、称重传感器等领域,用于测量和计量各类物体的重量。HX711模块通常配合称重传感器一起使用,例如压力传感器、负载细胞等。它采用24位的模数转换器(ADC)来精确测量传感器的电压变化。通过读取HX711模块输出的测量值,可以获取准确的称重数据。HX711模块是一种专门用于称重传感器的放大器模块。它的主要功能是将测得的微小电压信号放大到可以被微控制器读取的范围。原创 2024-09-11 18:52:28 · 629 阅读 · 0 评论 -
STM32、GD32驱动PCA9685控制舵机源码分享
一、PCA9685介绍一、PCA9685介绍PCA9685是一种16通道PWM(脉宽调制)控制器芯片,由NXP Semiconductors公司生产。它具有高速I2C总线接口,可以通过I2C总线与微控制器或其他设备进行通信。PCA9685广泛应用于各种需要精确控制多路PWM信号的应用,如LED灯控制、舵机控制、电机控制等。PCA9685芯片的工作原理是通过调整PWM的占空比来控制输出信号的电平。用户可以设置PWM输出频率和占空比,通过改变占空比来改变输出信号的电平。原创 2024-05-08 17:27:48 · 1031 阅读 · 0 评论 -
STM32、GD32驱动SHT30温湿度传感器源码分享
SHT30是一种数字湿度和温度传感器,由Sensirion公司生产。它是基于物理蒸发原理的湿度传感器,具有高精度和长期稳定性。SHT30采用I2C数字接口,可以直接与微控制器或其他设备连接。该传感器具有低功耗和快速响应的特点,能够在广泛的温度和湿度范围内准确测量。SHT30还具有内置的温度补偿功能,可以提供精确的湿度和温度测量结果。它广泛用于气象观测、室内环境监测、农业、工业自动化等领域。原创 2024-04-26 18:25:55 · 1037 阅读 · 0 评论 -
STM32、GD32等驱动AMG8833热成像传感器源码分享
AMG8833是一种红外热像传感器,也被称为热感传感器。它可以用来检测和测量物体的热辐射,并将其转换为数字图像。AMG8833传感器可以感知的热源范围为-20°C到100°C,并能提供8x8的像素分辨率。它通过I2C接口与微控制器或单片机进行通信,并可提供实时温度图像数据。AMG8833传感器被广泛用于热成像、人体检测、温度测量等应用领域。原创 2024-04-26 18:18:53 · 1232 阅读 · 2 评论 -
解析SBUS包源代码分享
二、数据格式错误时一定要重新开始寻找包头0x0f,否则数据会一直错误,因为数据帧中有可能有0x0f数据。实现方法为等报位0x00,因为任何通道数据都不可能为0x00。停止位为1位(STM32的初始化)校验位为PARITY_EVEN。波特率为100Kbit。原创 2023-02-28 17:00:56 · 394 阅读 · 0 评论 -
增量式PID与位置式PID的理解与代码实现
一、PID控制算法概述PID 实指“比例 proportional”、“积分 integral”、“微分 derivative”,这三项构 成 PID 基本要素。每一项完成不同任务,对系统功能产生不同的影响。它的结构简单,参数易 于调整,是控制系统中经常采用的控制算法。PID:比例单元(P)、积分单元(I)和微分单元(D)组成一、增量式PID比例P : e(k)-e(k-1) 这次误差-上次误差积分I : e(i) 误差微分D : e(k) - 2e(k-1)+e(k原创 2021-09-03 10:54:02 · 7169 阅读 · 1 评论 -
STM32F103驱动无刷直流电机应用思路
一、STM32F103驱动无刷直流电机基本思路无刷电机控制是基于6步换相法如下图所示:二、STM32F103驱动无刷直流电机方法介绍通常我们用的方法是使用高级定时器3通道互补输出去驱动mos管,用通用定时器连接霍尔传感器去触发中断,在中断中换相,基本原理如下图所示:三、驱动代码编写/*********************************************************************** Description : None* Input原创 2021-08-23 13:10:59 · 22009 阅读 · 6 评论 -
STM32或GD32驱动超高精度实时时钟PCF2129
一、PCF2129介绍PCF2129主要特性内部集成温度补偿功能的振荡器电容;精度:±3ppm(-20℃~+70℃);内置32.768 kHz晶振;可提供年、月、日、星期、时、分和秒等信息;时间印输入管脚,可中断的时间印功能;1MHz的双线I2C总线接口;6.5Mbit/s的三线SPI总线接口;备用电池输入和转换电路;备用电池电压输出;电池电量低报警;监控晶振停止工作功能;开漏中断引脚;1秒或1分钟中断输出;具有中断和复位功能的可编程的看门狗定时器;具有中断能力的可编程闹钟功原创 2021-06-18 15:36:54 · 1106 阅读 · 1 评论 -
STM32移植FAFTS文件系统遍历创建文件夹
FRESULT folder_create(char* path){ FRESULT res; DIR dir; char *str = path; char *pbuf; u16 cnt=0; res = f_opendir(&dir, path); if (res == FR_OK) { f_closedir(&dir); return FR_OK; } else { pbuf=mymalloc(SRAMIN,200);原创 2021-06-17 16:23:42 · 465 阅读 · 0 评论 -
STM32移植FAFTS文件系统遍历设备中的所有文件和文件夹
一、效果展示一、测试代码#include "sys.h"#include "delay.h"#include "usart.h" #include "led.h"#include "sdram.h"#include "mpu.h"#include "malloc.h"#include "nand.h" #include "ftl.h" #include "ff.h" #include "exfuns.h" #include "string.h"FRESULT scan原创 2021-06-17 14:16:47 · 1642 阅读 · 0 评论 -
STM32或GD32驱动TM1637
一、TM1637介绍TM1637 是一种带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU 数字接口、数据锁存器、LED 高压驱动、键盘扫描等电路。本产品性能优良,质量可靠。主要应用于电磁炉、微波炉及小家电产品的显示屏驱动。采用DIP/SOP20的封装形式。功能特点: 采用功率CMOS 工艺 显示模式(8 段×6 位),支持共阳数码管输出 键扫描(8×2bit),增强型抗干扰按键识别电路 辉度调节电路(占空比 8 级可调) 两线串行接口(原创 2021-06-16 15:24:18 · 3164 阅读 · 5 评论 -
STM32移植EasyLogger,在终端输出带颜色的日志
一、效果欣赏二、EasyLogger介绍 EasyLogger 是一款超轻量级(ROM<1.6K, RAM<0.3K)、高性能的 C/C++ 日志库,非常适合对资源敏感的软件项目,例如: IoT 产品、可穿戴设备、智能家居等等。相比 log4c、zlog 这些知名的 C/C++ 日志库, EasyLogger 的功能更加简单,提供给用户的接口更少,但上手会很快,更多实用功能支持以插件形式进行动态扩展。主要特性:1.支持用户自定义输出方式(例如:终端、文件、数据库、串口、485、原创 2021-05-27 09:57:51 · 2109 阅读 · 3 评论 -
使用STM32或GD32解析xml格式数据
一、XML文件介绍 可扩展标记语言,标准通用标记语言的子集,简称XML。是一种用于标记电子文件使其具有结构性的标记语言。 在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。是Internet环境中跨平台的、依赖于内容的技术,也是当今处理分布式结构信息的有效工具。早在1998年原创 2021-05-18 14:56:20 · 8575 阅读 · 5 评论 -
H750移植rt_thread操作系统完整工程分享,包括外部FLASH分散加载文件
一、移植注意事项1、在运行外部FLASH存储的代码之前首先要初始化QSPI进入内存映射模式,参考代码://QSPI进入内存映射模式(执行QSPI代码必备前提,为了减少引入的文件,//除了GPIO驱动外,其他的外设驱动均采用寄存器形式)void QSPI_Enable_Memmapmode(void){ unsigned int tempreg=0; volatile unsigned int *data_reg=&QUADSPI->DR; GPIO_InitTypeDef q原创 2021-05-17 15:55:42 · 1010 阅读 · 1 评论 -
STM32驱动RC522读卡完整资料分享,包含原理图、PCB、驱动工程文件
一、原理图二、PCB三、驱动程序main.c#include "delay.h"#include "sys.h"#include "rc522.h"#include "usart.h"#include "string.h" /*全局变量*/unsigned char CT[2];//卡类型unsigned char SN[4],SNSave[4]; //卡号unsigned char RFID[16]; //存放RFID u8 KEY[6]={0xff,0xff,0原创 2021-04-29 16:57:53 · 7689 阅读 · 2 评论 -
STM32H750获取系统时钟
rt_kprintf("SYSCLK_Frequency=%ld\n",HAL_RCC_GetSysClockFreq()); rt_kprintf("HCLK_Frequency=%ld\n",HAL_RCC_GetHCLKFreq()); rt_kprintf("PCLK1_Frequency=%ld\n",HAL_RCC_GetPCLK1Freq()); rt_kprintf("PCLK2_Frequency=%ld\n",HAL_RCC_GetPCLK2Freq());原创 2021-04-22 19:37:56 · 685 阅读 · 0 评论 -
移植rt-thread的过程中出现 #20: identifier “time_t“ is undefined或 identifier “clock_t“ is undefined
主要原因是在linux操作系统上这些值时定义的,但是移植到IAR或KEIL中是没有定义的,我查了半天三个值需要定义typedef long int time_t;typedef long clock_t;struct tm { int tm_sec; int tm_min; int tm_hour; int tm_mday; //一个月中的某天(0 - 31) int tm_mon; int tm原创 2021-04-22 19:22:08 · 2162 阅读 · 0 评论 -
STM32F103通过Ymodem协议更新程序带MD5校验
一、先来几张靓图二、Xshell软件设置三、程序更新流程waitStartVerInfo, //等待起始校验消息,确定协议getProgInfoPack, //或去信息包progFileDeal, //程序处理downloadAndSaveProg, //下载并保存程序verifyDownloadProg, //校验下载下来的程序carryProgToMcu, //搬运程序进入MCUverifyMcuProg, //校验搬运进入MCU的程序recordPr原创 2021-04-16 15:37:15 · 1152 阅读 · 1 评论 -
STM32驱动WK2168串口扩展芯片完整教程
一、WK2168介绍WK2168是首款具备256级FIFO的低功耗并支持 UART/SPITM/IIC/8位并行总线接口的4通道UART器件。可以通过模式选择使得该芯片工作于以上任何一种主接口模式,将选定的主接口扩展为4个增强功能的UART。扩展的子通道的UART具备如下功能特点:1.每个子通道UART的波特率、字长、校验格式可以独立设置,最高可以提供2Mbps的通信速率。2.每个子通道可以独立设置工作在IrDA红外通信、 RS-485自动收发控制、 9位网络地址自动识别、软件/硬件自动流量原创 2021-04-13 13:44:18 · 4772 阅读 · 0 评论 -
ARM开发中常见数据类型取值范围
数据类型C语言取值范围整型int-2147483648~+2147483647无符号整型unsigned int0~4294967295短整型short int-32768~32767无符号短整型unsigned short int0~65535长整型long int-2147483648~+2147483647无符号长整型unsigned long int0~4294967295长长整型long long int-9,...原创 2021-04-08 16:26:20 · 1195 阅读 · 1 评论 -
STM32串口波特率计算问题和常用波特率
一、分数波特率的产生一、接收器和发送器的波特率在USARTDIV的整数和小数寄存器中的值应设置成相同。 =这里的fck是给外设的时钟(PCLK1用于USART2、 3、 4、 5, PCLK2用于USART1)USARTDIV是一个无符号的定点数。这12位的值设置在USART_BRR寄存器。注: 在写入USART_BRR之后,波特率计数器会被波特率寄存器的新值替换。因此,不要在通信进行中改变波特率寄存器的数值。如何从USART_BRR寄存器值得到USARTDIV例1: 如果 DIV_Mant原创 2021-03-30 19:05:04 · 14875 阅读 · 0 评论 -
使用KEIL开发ARM如何实现像面向对象语言一样的构造函数呢-$Sub$$与$Super$$
一、首先咱们先看一段代码:void $Sub$$main(void){ extern int main(void); extern int $Super$$main(void); delay_init(); uart_init(115200); printf("调用主函数之前调用$Sub$$main函数\r\n"); $Super$$main(); }int main(void){ printf("调用主函数\r\n"); while(1) { pri原创 2021-03-29 10:58:14 · 674 阅读 · 1 评论 -
STM32标准库rt-thread工程中移植syswatch组件
一、syswatch组件介绍 系统看守(syswatch)组件 主要功能是保障实时操作系统正常运行,防止系统死机 以及各种异常引起的线程阻塞,保障整个系统长期正常运行。系统看守具备以下几种行为模式:1.系统崩溃或硬件异常导致系统失去调度时,执行 系统复位 恢复系统正常运行。2.当有异常导致某些线程长时间阻塞时,可根据用户的配置实施 系统复位 / 杀掉阻塞线程 / 重启阻塞线程 的方式恢复系统正常运行。二、工作原理简述 系统看守(syswatch)组件 使用实时操作系统中允许的最高优先级作为看守原创 2021-03-12 16:09:55 · 1007 阅读 · 0 评论 -
基于STM32F103标准库、rt-thread操作系统完美移植freemodbus主机程序
一、说明1.移植的开发环境是keil5。2.基于rt-thread操作系统,也可以使用ucos和freeRTOS操作系统。3.本人可有偿代移植其他操作系统,具体费用主页加我QQ联系。4.页面底部有rt-thread操作系统移植成功的工程链接,大家可以参考。二、移植步骤由于移植过程比较繁琐,就不过多说明了,大家可以下载工程研究一下就行三、特殊说明1. 读取输入寄存器(功能04)使用函数:/** * Modbus master input register callback functio原创 2021-03-11 16:38:39 · 3363 阅读 · 5 评论 -
STM32 SPI驱动OLED12864原理图和源代码分享
一、原理图芯片引脚连接二、驱动程序spi.c#include "spi.h"void SPI1_Init(void){ GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE );//PORTA时钟使能 RCC_APB2PeriphClockCmd( RCC_APB2Perip原创 2021-02-20 17:53:07 · 9804 阅读 · 2 评论 -
STM32F407 FSMC驱动MT29F4G08A NAND FLASH源代码分享
一、MT29F4G08A概述 MT29F4G08是一颗 512MB 的 NAND FLASH 芯片相对于 SPI FLASH( W25Q256)和 SD 卡等存储设备,NAND FLASH 采用 8 位并口访问,具有访问速度快的优势。1、NAND FLASH信号线2、NAND FLASH 存储阵列由图可知: MT29F4G08 由 2 个 plane 组成,每个 plane 有 2048 个 block,每个 block 由 64个 page 组成,每个 page 有 2K+64 字节(原创 2020-12-17 13:27:27 · 5510 阅读 · 9 评论 -
STM32驱动TM1639点亮数码管和LED,原理图、PCB
一、原理图二、程序代码#include "led.h"#include "delay.h"void led_init(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE); //使能PB,PE端口时钟 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENA原创 2020-12-16 17:48:39 · 4170 阅读 · 2 评论 -
LD3320语音识别详细资料,包括原理图、PCB、MDK工程代码,PCB可以直接发出打样烧入程序就可使用
一、概述LD3320语音识别详细资料,中间还使用了SYN6288中文语音合成芯片,可以拟合出任意中文,然后语音发出,PCB、程序都是经过本人验证过的,可以拿来直接使用,下面是截图,需要的可以再文章末尾点击链接下载,需要收费9.9哦,提供技术支持,可以再主页加我QQ咨询。二、注意点1、单片机采用的STM32F103C8T6并口驱动LD33202、单片机对外引出串口,可以连接自己的系统实现相关功能,包括语音控制灯光等等。3、识别指令可以自己更改,不知道在哪更改的可以咨询我。4、需要在上面添加额外功能原创 2020-12-16 17:11:40 · 6473 阅读 · 5 评论 -
STM32F407通过自带USB驱动EC20 4G模块-完整工程
EC20 4G模块可以通过串口和USB去驱动,但是串口速度比较慢,所以通过USB驱动才能提高通信速率。硬件连接:STM32F407:EC20模块:部分参考代码:/* USER CODE END Header *//* Includes ------------------------------------------------------------------*/#include "main.h"#include "usb_host.h"#include "usbh_def.原创 2020-12-15 17:30:39 · 10350 阅读 · 18 评论 -
STM32F4调用STMFLASH_Write总是写入失败
解决办法:在擦除flash之前调用FLASH_ClearFlag( FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR);如下:void STMFLASH_Write(u32 WriteAddr,u32 *pBuffer,u32 NumToWrite) { FLASH_Status status = FLASH_COMPLETE; u32 addrx=0;原创 2020-11-10 18:06:51 · 2393 阅读 · 1 评论 -
利用STM32F103的高级定时器产生三路互补PWM波形,占空比可调,带死区
void timer_init(void){ GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_BaseInitStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_BDTRInitTypeDef TIM_BDTRInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph原创 2020-11-04 10:18:41 · 2328 阅读 · 0 评论 -
STM32利用CJSON库生成和解析JSON格式数据
一、解析JSON格式数据//需要解析的字符串char *str="{\"action\":\"writePara\",\"value\":{\"id\":\"1\",\"frontId\":\"1\",\"band485\":\"1200\",\"bandCan\":\"10\",\"sidewayTime\":\"10\",\"sidwwaySync\":\"1\",\"upDownTime\":\"10\",\"upDownTimeSync\":\"1\",\"hookMode\":\"electr原创 2020-10-24 10:41:53 · 2915 阅读 · 0 评论 -
轻量级嵌入式数据库FlashDB的介绍与使用
一、FlashDB的介绍FlashDB 是一款超轻量级的嵌入式数据库,专注于提供嵌入式产品的数据存储方案。与传统的基于文件系统的数据库不同,FlashDB 结合了 Flash 的特性,具有较强的性能及可靠性。并在保证极低的资源占用前提下,尽可能延长 Flash 使用寿命。 FlashDB 提供两种数据库模式: 键值数据库 和 时序数据库。二、移植定义 flash 设备在定义 Flash 设备表前,需要先定义 Flash 设备。可以是片内 flash, 也可以是片外基于 SFUD 的 spi fla原创 2020-10-20 14:23:35 · 11332 阅读 · 11 评论 -
STM32驱动压电式蜂鸣器发出和弦音原理图加程序
一、原理图一、驱动代码#include "beep.h"void beep_init(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能GPIOB端口时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //BEEP-->PB.8 端口配置 GPIO_InitStructur原创 2020-10-13 09:07:19 · 3479 阅读 · 3 评论 -
STM32驱动TM1616程序加原理图
一、TM1616原理图二、驱动程序#include "led.h"void led_init(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOE, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStru原创 2020-09-25 08:59:10 · 4672 阅读 · 0 评论 -
STM32F407软件模拟IIC驱动RX8025程序加原理图
一、RX8025T介绍RX8025-T是一款拥有I2C接口和温度补偿功能的新型实时时钟芯片,内部集成32.768KHz温度补偿晶体振荡器,可用于各种需要高精度时钟的场合。通过设置相应补偿的控制位,可以实现不同间隔的温度补偿功能,从而大大提高了时钟的精度。芯片可设置四种不同的时段进行温度补偿,默认设置是2S补偿。该芯片采用C-MOS工艺生产,具有极低的功能消耗,可长期使用电池供电。二、原理图三、参考程序u8 r8025_init(void){ uint8_t val[3]={0x00,0x00,原创 2020-09-25 08:56:06 · 5828 阅读 · 2 评论 -
STM32F103加旋转编码器实现正反转和旋转圈数读取
一、旋转编码器连接原理图二、采集程序STM32F103#define key_dir() PBin(1)#define key_sw() PBin(2)void key_init(void){ EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_原创 2020-09-23 13:22:31 · 5944 阅读 · 4 评论 -
STM32F103驱动TM1639点亮数码管和LED
一、TM1639时序图二、时序模拟代码void led_init(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE); //使能PB,PE端口时钟 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); GPIO_InitStructure.原创 2020-09-19 10:23:47 · 2800 阅读 · 0 评论 -
STM32F103移植FreeModbus主机协议实现modbus主机
一、代码结构首先复制FreeModbus官网的协议栈里后缀为.m的文件,复制到自己的工程中,如下图所示:二、代码修改1.首先在主函数中调用初始化函数并且使能modbus: eMBMasterInit(MB_RTU, 2, 115200, MB_PAR_EVEN); eMBMasterEnable();2.在一个大循环中调用eMBMasterPoll。三、操作从机 usModbusUserData[0] = (USHORT)(rt_tick_get()/10); usModbusU原创 2020-08-14 18:56:32 · 4616 阅读 · 6 评论 -
STM32驱动74HC165原理图加程序
一、原理图三、时序图二、驱动源码void couple_init(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE); //使能PB,PE端口时钟 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);原创 2020-08-11 11:14:33 · 13924 阅读 · 6 评论