
stm32
zd845101500
单片机软件、硬件设计、搞机爱好者,尽量原创
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
全部可显示的ASCII字符
全部可显示的ASCII字符用于制作字模使用。原创 2025-06-09 22:53:45 · 129 阅读 · 0 评论 -
STM32 HAL驱动程序 内部Flash
【代码】STM32 HAL驱动程序 内部Flash。原创 2025-05-13 21:36:57 · 437 阅读 · 0 评论 -
STM32 HAL 驱动ATGM336H GPS模块
A,4109.11982,N,12201.25990 经纬度 122.02100,41.15200,还是偏。经纬度:122.02103,41.15197,在室内测得位置信息,经查询南北相差20米,东西相差一公里。纬度 41+09.11831/60 = 41.15197 (结果保留5位小数即可)A,4109.11831,N,12201.26192转换为经纬度。经度122+01.26192/60 = 122.02103。定位信息报文如下,其中N A后边的数字是经纬度。原创 2025-04-25 15:11:06 · 263 阅读 · 0 评论 -
STM32 HAL 水位传感器驱动程序
工作原理是输出模拟量电压值,只需要使用stm32adc读取电压再转换一下即可。原创 2025-04-20 20:02:16 · 410 阅读 · 0 评论 -
STM32 HAL 通用定时器延时函数
使用通用定时器TIM3,实现ms、us延时。原创 2025-04-18 09:15:10 · 464 阅读 · 0 评论 -
STM32 HAL DHT11驱动程序
DHT11驱动程序会占用TIM3定时器,进行高精度延时。程序共包含4个文件DHT11.cDHT11.hdelay.cdelay.h。原创 2025-04-12 13:07:26 · 504 阅读 · 0 评论 -
stm32 HAL oled12864驱动程序
驱动程序共包含三个文件 OLED.c 、OLED.h、#include "OLED_Font.h"3、使用显示函数显示字符或字符串。1、在main.c添加。2、在主函数中初始化。原创 2025-04-12 12:55:06 · 380 阅读 · 0 评论 -
stm32单片机程序运行时间计时程序
能够计时某段stm32f429单片机程序运行时间的程序,开始计时函数和结束计时函数,结束时通过printf输出运行时间。如果你的系统时钟不是180MHz,需要修改endTimer()中的除数。需要确保你的工程中已经正确配置了串口打印功能(重定向了printf)计时精度取决于CPU频率,180MHz时精度约为5.56ns。计时器是32位的,在180MHz时大约能测量最大23.8秒。如果需要测量更长时间,可以修改代码使用64位变量存储时间。原创 2025-01-08 14:06:32 · 449 阅读 · 0 评论 -
[LWIP] 如何实现LWIP热插拔功能
如何实现LWIP热插拔功能原创 2024-09-13 17:32:53 · 741 阅读 · 0 评论 -
按时序执行动作的程序
使用一个结构体描述执行的动作,使用一个数组组成动作组,通过一个定时器遍历这个动作组。原创 2024-08-26 15:54:43 · 223 阅读 · 0 评论 -
GPT4o编写步进电机控制代码
基于STM32F407 HAL库,写一个步进电机控制程序,需要控制8个步进电机,我会给出描述步进电机的结构体变量,基于这些变量需要你做出以下功能,电机脉冲通过定时器中断翻转脉冲引脚的电平实现,零点位置在最小限位和最大限位中间,运行的距离根据脉冲数而定。要能够实现多个电机同时运行动作,给我一份完整的程序,C文件和H文件,包括8路电机参数、定时器和引脚的初始化,total_steps这个变量表示电机最大能够运行的步数,在复位或者其他动作时,如果运行超过这个步数还是没有接收到限位传感器信号则立即停止电机。原创 2024-08-14 17:01:25 · 1032 阅读 · 0 评论 -
ads1247参考代码
【代码】ads1247参考代码。原创 2024-06-17 08:08:23 · 384 阅读 · 0 评论 -
隔离4-20ma转PWM
原创 2024-03-22 21:34:46 · 240 阅读 · 0 评论 -
支持CAN通信和RS232的24bit ADC采集板
单片机使用stm32f103can芯片 TJA1050ADC芯片 ADS1256电压基准芯片 REF3020,2.048V电压供电使用LDO。原创 2024-02-19 11:17:56 · 732 阅读 · 0 评论 -
基于stm32F4 HAL固件库16BIT DAC AD5676驱动代码
【代码】基于stm32F4 HAL固件库16BIT DAC AD5676驱动代码。原创 2023-07-21 11:21:18 · 854 阅读 · 0 评论 -
LAN8720网卡掉线|PCB网络不稳定
阻抗特性:再高速网络信号中,PCB走线需要达到指定的阻抗值。差分线:网线输入输出分别由两条差分线构成。网线阻抗值:100ohm。原创 2023-07-07 14:16:44 · 1224 阅读 · 0 评论 -
UCOS+LWIP启动流程分析记录
正点原子F429 网络实验源码功能分析。初始化流程如下,设置MAC信息变量和IP信息的变量。初始化网卡相关GPIO,ETH_Handler网络控制器外设初始化。DMA网络描述符内存申请,发送接收缓冲区内存申请。lwip中mem和memp的内存申请。设置网络相关信息 ip地址、网络掩码、网关、网卡接口初始化。//底层硬件初始化函数DMA网络描述符初始化,开启MAC和DMA。//设置netif为默认网口设置默认网卡的指针变量。原创 2023-01-18 11:15:50 · 781 阅读 · 0 评论 -
如何查看HAL库版本\stm32 HAL版本号
查看HAL版本原创 2022-12-06 09:48:05 · 3484 阅读 · 0 评论 -
ADC芯片3421驱动程序
#ifndef MCP3421_H#define MCP3421_H#include "common.h"typedef enum mcp_div{ mcp_div_12 = 0, mcp_div_14, mcp_div_16, mcp_div_18,}mcp_div_e;typedef enum mcp_amp{ mcp_amp_x1 = 0, mcp_amp_2, mcp_amp_4, mcp_amp_8,}mcp_am.原创 2022-04-25 15:12:13 · 2188 阅读 · 0 评论 -
IAR stm32开发环境搭建(3.5标准库新建工程)
说明:使用3.5标准库 搭建stm32 IAR开发环境文件准备①下载stm32标准库:从ST官方下载需要先注册登录,连接②下载IAR集成开发环境:版本8.32,连接软件安装:建立工程:①新建文件夹project01,作为新建工程的工程目录②打开IAR软件新建工程打开IAR->File->New Workspace(建立工作空间),然后点击File->Save Workspase As,保存工作空间到新建的工程目录project01点击保存后,I.原创 2021-03-16 16:40:08 · 2969 阅读 · 0 评论 -
STM32单片机printf重定向到串口
重定向就是将标准输出函数的出口指向串口,自定义一个int fputc(int c, FILE *stream)将形参的c变量通过串口发送即完成printf重定向。示例代码:STM32F0使用HAL固件库:int fputc(int c, FILE *stream){ huart1.Instance->TDR = (c & (uint8_t)0xFFU);//将c赋给串口1的DR寄存器,即printf重定向到串口1。 while(!__HAL_UART_GET_F...原创 2021-03-12 10:12:28 · 752 阅读 · 0 评论 -
stm32f1实时获取片上flash大小
返回值为片上flash空间大小 单位 KByte。uint16_t get_flash_size(void){ return *((uint16_t*)0x1FFFF7E0);}flash小于256k 扇区大小为1kflash大于256k 扇区大小为2k原创 2021-01-08 09:29:25 · 992 阅读 · 0 评论 -
IAR打不上断点是什么原因
解决方法1、project -> Clean,重新编译。2、Options ->C/C++ Compiler -> Optimizations -> Level 选择None原创 2021-01-06 15:22:00 · 1499 阅读 · 0 评论 -
STM32F0、F1、F4的IAP程序
IAP是什么?IAP(In Application Programming)即在应用编程,解释一下,就是给单片机下载烧录程序的,而且只要有串口就行。下载器J-Link、ST-Link、ISP下载也都能给单片机下载程序,但是这些都需要对硬件进行干预,不是很方便,比如下载器要插在板子上,ISP要改变启动的分区,而且ISP是官方的固定不变的,不能做个性化的功能。IAP就能解决这些问题其实ST官方就有提供IAP的例程,我们可以在例程的基础上添加个性化的功能,比如改成能通过网络或者U盘升级的、能够加密用户程序原创 2020-11-27 09:35:01 · 1290 阅读 · 0 评论 -
st单片机的堆栈/内存分布
堆栈的作用:堆:全局变量,静态变量,以及内存管理所用的内存,都是属于"堆"栈:用于局部变量,函数调时现场保护和返回地址,函数的形参等查看堆栈的占用空间:堆栈在st内存中的分布采用默认设置栈0x400、堆0x200查看编译的map文件,ram占2104byte,栈顶指针指向0x20000838如图可看出堆的空间在0x2000 0000到0x2000 0434。栈的空间在0x2000 0438到0x2000 0838。...原创 2020-11-02 08:52:03 · 1286 阅读 · 2 评论 -
在IAR中使用汇编指令\内嵌汇编
先看内嵌汇编示例,两种写法(IAR8.3实测可正常编译运行)//示例一:if (((*(__IO uint32_t *)ApplicationAddress) & 0x2FFE0000) == 0x20000000){ //跳转至用户代码 JumpAddress = *(__IO uint32_t *)(ApplicationAddress + 4); Jump_To_Application = (pFunction)JumpAddress;原创 2020-10-15 13:45:46 · 4666 阅读 · 0 评论 -
STM32 CUBE报错 xxx but MDK-ARM V5.27 project generation have a problem
两个原因1、路径或文件名包含中文2、jdk版本太高,最后使用jdk 11,不再报错附下载链接https://www.oracle.com/java/technologies/javase-jdk11-downloads.html真的烦原创 2020-09-30 22:01:28 · 2522 阅读 · 0 评论 -
STM32F0、f1、f4之间的差异\STM32不同系列单片机的差别
1、内核的差别f0:使用Cortex-M0内核f1:使用Cortex-M3内核f4:使用Cortex-M4内核内核最大的区别就是指令集数量的差别,指令数量依次增加,且兼容。2、flash、ramf0:flash起始地址0x0800 0000f1:flash起始地址0x0800 0000f4:flash起始地址0x0800 0000...原创 2020-09-27 11:29:28 · 6936 阅读 · 0 评论 -
stm32写flash报错FLASH_ERROR_PG
直接调用FLASH_ProgramWord();会返回FLASH_ERROR_PG的错误怎么办正确操作流程写数据基本流程为解锁-》擦除-》写入-》上锁,库函数都有对应的函数。报FLASH_ERROR_PG这个错误的原因是因为在写入前没有进行擦除。...原创 2020-09-08 13:55:32 · 5275 阅读 · 0 评论 -
寄存器1、怎么操作stm32寄存器/操作单片机寄存器
通过3个问题理解寄存器及其操作。什么是寄存器(就是个数字)?简单可以理解为能够通过软件改写数值、控制硬件的一个32bit的数字。多个数字一起控制一个外设。这个数值在哪?这个数字要被存起来,就一定有一个存储的地址,地址可以通过单片机的数据手册查到。如何改写这个数值?有了地址,可以设置一个指针指向此地址,然后写入数据。有库可以直接写寄存器名字进行操作。详细解读:1、什么是寄存器(就是个数字)?寄存器是实现软硬件的接口,几乎所有的硬件功能控制都是通过操作寄存器来实现的,..原创 2020-08-28 07:28:43 · 9490 阅读 · 0 评论 -
GD32单片机使用16M晶振如何修改库
GD32F350基本和ST一样,首先修改PLL输入的分频值(忽略部分代码)static void system_clock_108m_hxtal(void){ /*忽略*/ /* PLL = HXTAL /2 * 27 = 108 MHz */ RCU_CFG0 &= ~(RCU_CFG0_PLLSEL | RCU_CFG0_PLLMF | RCU_CFG0_PLLMF4 | RCU_CFG0_PLLDV); RCU_CFG1 &= ~(RCU_原创 2020-07-10 09:27:35 · 2504 阅读 · 0 评论 -
IAR\ST-Link调试程序查看STM32单片机某段代码运行时间
需要知道某段代码的运行时间,有硬件的方法,也有软件的方法硬件方法:1:在测量起始点,反转电平2:在测量结束点,再次反转电平软件方法:1、在测量起始点和测量结束点设置断点2、进入调试模式,点击工具栏ST-Link→Data Log Summary→弹出的窗口右键Enable。3、运行程序到达测量起始点,会显示运行时间,再全速运行至结束点,时间差即为测量出的运行时间。没有验证过精度,要求不高的可以满足。...原创 2020-05-14 17:01:11 · 5481 阅读 · 2 评论 -
51/stm32单片机软件调试方法与技巧
常用单片机调试方式有仿真器、串口、屏幕显示。1、仿真器仿真IAR、keil等集成开发环境配合仿真器调试程序很适合单片机优点:可设置断点、实时查看内存等缺点:要有仿真器2、串口调试相较于仿真器仿真,串口调试不需要仿真器,在某些没有或者不能使用仿真器的系统上更实用,通用性更强。一般串口输出我们会使用重定向到串口的printf函数或者自定义的串口输出函数(比如:send_de...原创 2020-01-19 14:32:38 · 5197 阅读 · 0 评论 -
__iar_program_start在哪里定义/main之前做了什么
在IAR环境下stm32的汇编启动引导代码中有如下内容这是一个IAR内部定义的函数,基本是一些初始化的操作。总之,IAR在启动main()函数以前,执行了Reset_Handler,调用SystemInit()(ST库提供)进行时钟,Flash读取初始化,并转入__iar_program_start中执行__low_level_init与__iar_data_init2,并在__i...原创 2019-12-31 10:48:36 · 9117 阅读 · 0 评论 -
stm32汇编与C接口/软件性能效率提升问题
使用ARMCC编译.\ArmCC.exe --arm -S .\main.c -o main_armcc.s如下两段C代码和其对应的汇编,逻辑相同,区别在于变量类型,一个使用8bit char一个使用32bit int,对应的汇编代码却不相同,使用char型会多出几步操作。所以在编程时如果没有特殊需求,尽量使用32位的类型int test_main(int a0,char a1, c...原创 2019-12-26 14:39:31 · 485 阅读 · 0 评论 -
IAR软件*.map文件查看程序占用ROM和RAM大小
查看单片机程序占用rom和ram的大小:IAR程序编译后会在Project\Debug\List文件夹下生成一个*,map文件,用文本编辑软件打开,在最后面的部分会有空间占用信息,例如下图readonly code和readonly data使用的是ROM空间,readwrite data使用的是SRAM空间。单片机RAM空间会被栈、全局变量占用,改变全局变量的占用会明显改变rea...原创 2019-12-10 16:31:11 · 10514 阅读 · 0 评论 -
STM32标准库使用外部16MHZ晶振修改程序配置
参考时钟树,修改图中红框内的分频。查找PREDIV1,查找手册发现由RCC_CFGR寄存器控制。在system_stm32f10x.c文件中对static void SetSysClockTo72(void)函数进行修改,将RCC_CFGR的bit17置1。RCC->CFGR |= (uint32_t)(0x00020000 | 0x00010000 | ...原创 2019-12-02 16:02:31 · 1415 阅读 · 0 评论 -
两相四线步进电机的驱动方法/驱动芯片用法
两相四线步进电机驱动原理可参考:https://blog.youkuaiyun.com/feiyinzilgd/article/details/5743730主要说一下步进电机驱动芯片作用。步进电机芯片的控制一般有en、step、dir、ms,分别对应使能、步、方向、细分选择。两相四线驱动方式有4拍,八拍的方式,对应的芯片细分为full-step、half-step,4拍、8拍电机就转动一圈。...原创 2019-11-13 16:23:51 · 36417 阅读 · 3 评论 -
ESP8266/ESP-01上电体验/硬件连接
ESP-01模块引脚定义 1 GND GND 2 GPIO2 通用IO,内部已上拉 3 GPIO0 工作模式选择: 悬空:Flash Boot,工作模式 下拉:UART DownLoa...原创 2019-10-18 09:39:44 · 11776 阅读 · 1 评论 -
RS232串口介绍
RS232接口定义如下通信过程中只有两个脚参与通信2脚:电脑的输入RXD3脚:电脑的输出TXD 通过2 ,3 脚就可以实现全双工(可同时收发)的串行异步 通信5脚:接地连接2、3、5三个引脚即可进行通讯。电平标准单片机的电平标准 TTL电平 :+5V(+3.3V)表示1 0V表示0Rs232的电平标准 +15/+13 V表示1 -15/-13 表示0某些IC...转载 2019-10-16 11:16:37 · 4163 阅读 · 0 评论