![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
stm32
zd845101500
单片机、硬件设计、linux应用和驱动开发、搞机爱好者,尽量原创
展开
-
按时序执行动作的程序
使用一个结构体描述执行的动作,使用一个数组组成动作组,通过一个定时器遍历这个动作组。原创 2024-08-26 15:54:43 · 28 阅读 · 0 评论 -
GPT4o编写步进电机控制代码
基于STM32F407 HAL库,写一个步进电机控制程序,需要控制8个步进电机,我会给出描述步进电机的结构体变量,基于这些变量需要你做出以下功能,电机脉冲通过定时器中断翻转脉冲引脚的电平实现,零点位置在最小限位和最大限位中间,运行的距离根据脉冲数而定。要能够实现多个电机同时运行动作,给我一份完整的程序,C文件和H文件,包括8路电机参数、定时器和引脚的初始化,total_steps这个变量表示电机最大能够运行的步数,在复位或者其他动作时,如果运行超过这个步数还是没有接收到限位传感器信号则立即停止电机。原创 2024-08-14 17:01:25 · 802 阅读 · 0 评论 -
ads1247参考代码
【代码】ads1247参考代码。原创 2024-06-17 08:08:23 · 246 阅读 · 0 评论 -
隔离4-20ma转PWM
原创 2024-03-22 21:34:46 · 131 阅读 · 0 评论 -
支持CAN通信和RS232的24bit ADC采集板
单片机使用stm32f103can芯片 TJA1050ADC芯片 ADS1256电压基准芯片 REF3020,2.048V电压供电使用LDO。原创 2024-02-19 11:17:56 · 417 阅读 · 0 评论 -
基于stm32F4 HAL固件库16BIT DAC AD5676驱动代码
【代码】基于stm32F4 HAL固件库16BIT DAC AD5676驱动代码。原创 2023-07-21 11:21:18 · 544 阅读 · 0 评论 -
LAN8720网卡掉线|PCB网络不稳定
阻抗特性:再高速网络信号中,PCB走线需要达到指定的阻抗值。差分线:网线输入输出分别由两条差分线构成。网线阻抗值:100ohm。原创 2023-07-07 14:16:44 · 914 阅读 · 0 评论 -
UCOS+LWIP启动流程分析记录
正点原子F429 网络实验源码功能分析。初始化流程如下,设置MAC信息变量和IP信息的变量。初始化网卡相关GPIO,ETH_Handler网络控制器外设初始化。DMA网络描述符内存申请,发送接收缓冲区内存申请。lwip中mem和memp的内存申请。设置网络相关信息 ip地址、网络掩码、网关、网卡接口初始化。//底层硬件初始化函数DMA网络描述符初始化,开启MAC和DMA。//设置netif为默认网口设置默认网卡的指针变量。原创 2023-01-18 11:15:50 · 709 阅读 · 0 评论 -
如何查看HAL库版本\stm32 HAL版本号
查看HAL版本原创 2022-12-06 09:48:05 · 2163 阅读 · 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 · 1797 阅读 · 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 · 2506 阅读 · 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 · 675 阅读 · 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 · 868 阅读 · 0 评论 -
IAR打不上断点是什么原因
解决方法1、project -> Clean,重新编译。2、Options ->C/C++ Compiler -> Optimizations -> Level 选择None原创 2021-01-06 15:22:00 · 1329 阅读 · 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 · 1029 阅读 · 0 评论 -
st单片机的堆栈/内存分布
堆栈的作用:堆:全局变量,静态变量,以及内存管理所用的内存,都是属于"堆"栈:用于局部变量,函数调时现场保护和返回地址,函数的形参等查看堆栈的占用空间:堆栈在st内存中的分布采用默认设置栈0x400、堆0x200查看编译的map文件,ram占2104byte,栈顶指针指向0x20000838如图可看出堆的空间在0x2000 0000到0x2000 0434。栈的空间在0x2000 0438到0x2000 0838。...原创 2020-11-02 08:52:03 · 1117 阅读 · 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 · 3789 阅读 · 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 · 2250 阅读 · 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 · 6290 阅读 · 0 评论 -
stm32写flash报错FLASH_ERROR_PG
直接调用FLASH_ProgramWord();会返回FLASH_ERROR_PG的错误怎么办正确操作流程写数据基本流程为解锁-》擦除-》写入-》上锁,库函数都有对应的函数。报FLASH_ERROR_PG这个错误的原因是因为在写入前没有进行擦除。...原创 2020-09-08 13:55:32 · 4615 阅读 · 0 评论 -
寄存器1、怎么操作stm32寄存器/操作单片机寄存器
通过3个问题理解寄存器及其操作。什么是寄存器(就是个数字)?简单可以理解为能够通过软件改写数值、控制硬件的一个32bit的数字。多个数字一起控制一个外设。这个数值在哪?这个数字要被存起来,就一定有一个存储的地址,地址可以通过单片机的数据手册查到。如何改写这个数值?有了地址,可以设置一个指针指向此地址,然后写入数据。有库可以直接写寄存器名字进行操作。详细解读:1、什么是寄存器(就是个数字)?寄存器是实现软硬件的接口,几乎所有的硬件功能控制都是通过操作寄存器来实现的,..原创 2020-08-28 07:28:43 · 8551 阅读 · 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 · 2178 阅读 · 0 评论 -
IAR\ST-Link调试程序查看STM32单片机某段代码运行时间
需要知道某段代码的运行时间,有硬件的方法,也有软件的方法硬件方法:1:在测量起始点,反转电平2:在测量结束点,再次反转电平软件方法:1、在测量起始点和测量结束点设置断点2、进入调试模式,点击工具栏ST-Link→Data Log Summary→弹出的窗口右键Enable。3、运行程序到达测量起始点,会显示运行时间,再全速运行至结束点,时间差即为测量出的运行时间。没有验证过精度,要求不高的可以满足。...原创 2020-05-14 17:01:11 · 4288 阅读 · 2 评论 -
51/stm32单片机软件调试方法与技巧
常用单片机调试方式有仿真器、串口、屏幕显示。1、仿真器仿真IAR、keil等集成开发环境配合仿真器调试程序很适合单片机优点:可设置断点、实时查看内存等缺点:要有仿真器2、串口调试相较于仿真器仿真,串口调试不需要仿真器,在某些没有或者不能使用仿真器的系统上更实用,通用性更强。一般串口输出我们会使用重定向到串口的printf函数或者自定义的串口输出函数(比如:send_de...原创 2020-01-19 14:32:38 · 4774 阅读 · 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 · 8070 阅读 · 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 · 398 阅读 · 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 · 8692 阅读 · 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 · 1305 阅读 · 0 评论 -
两相四线步进电机的驱动方法/驱动芯片用法
两相四线步进电机驱动原理可参考:https://blog.csdn.net/feiyinzilgd/article/details/5743730主要说一下步进电机驱动芯片作用。步进电机芯片的控制一般有en、step、dir、ms,分别对应使能、步、方向、细分选择。两相四线驱动方式有4拍,八拍的方式,对应的芯片细分为full-step、half-step,4拍、8拍电机就转动一圈。...原创 2019-11-13 16:23:51 · 30460 阅读 · 3 评论 -
ESP8266/ESP-01上电体验/硬件连接
ESP-01模块引脚定义 1 GND GND 2 GPIO2 通用IO,内部已上拉 3 GPIO0 工作模式选择: 悬空:Flash Boot,工作模式 下拉:UART DownLoa...原创 2019-10-18 09:39:44 · 11470 阅读 · 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 · 3827 阅读 · 0 评论 -
STM32外部中断
GPIO 的管脚 GPIOx.0~GPIOx.15(x=A,B,C,D,E,F,G)分别对应中断线 15~0。以线 0 为例:它对应了 GPIOA.0、GPIOB.0、GPIOC.0、GPIOD.0、GPIOE.0、GPIOF.0、GPIOG.0。而中断线每次只能连接到 1 个 IO 口上,这样就需要通过配置来决定对应的中断线配置到哪个 GPIO 上了。GPIO 跟中断线的映射关系图:RC...转载 2019-06-13 11:32:29 · 1900 阅读 · 0 评论 -
STM32中断优先级管理
1、先对优先级进行分组,数值越小所代表的优先级就越高组 AIRCR[10:8] Bit[7:4] 分配结果 0 111 0:4 0 位抢占优先级,4 位响应优先级 1 110 1:3 1 位抢占优先级,3 位响应优先级 2 101 2:2 2 位抢占优先级,2 位响应优先级 3 100 3:1...原创 2019-06-13 11:32:00 · 758 阅读 · 0 评论 -
STM32串口及按键
UART1的初始化设置void UART_Init(){ /* GPIO初始化参数*/ GPIO_InitTypeDef GPIO_InitStruct; /* UART初始化参数*/ USART_InitTypeDef USART_InitStruct; /* 复位UART1*/ USART_DeInit(USART1); /* 开启USART1时钟*/...原创 2019-06-13 11:33:39 · 2361 阅读 · 0 评论 -
stm32在keil和IAR中的汇编启动代码不相同
最近学习cortex-A8内核的soc,在Linux环境下开发,从汇编到C、uboot分析移植。过程中发现,使用的汇编和keil中同是arm内核的stm32单片机的汇编不太相同。然后大概的查了一下是因为编译器不同。其实从stm32标准库中提供的文件我们就可以看出一这一问题的答案。在ST提供的标准库中提供了针对不同编译器的启动代码,如下图可以看出一共有针对4种编译工具的启动代码第...原创 2019-06-26 16:22:11 · 1822 阅读 · 1 评论 -
JTAG接口针脚定义及含义
JTAG有10pin的、14pin的和20pin的,尽管引脚数和引脚的排列顺序不同,但是其中有一些引脚是一样的,各个引脚的定义如下。一、引脚定义Test Clock Input (TCK) -----强制要求1TCK在IEEE1149.1标准里是强制要求的。TCK为TAP的操作提供了一个独立的、基本的时钟信号,TAP的所有操作都是通过这个时钟信号来驱动的。Test Mode Sel...转载 2019-07-16 14:08:20 · 2680 阅读 · 0 评论 -
stm32 汇编点灯原子mini板
先贴上源码/*RCC */.equ RCC_BASE, 0x40021000.equ RCC_CR, (RCC_BASE + 0x00).equ RCC_CFGR, (RCC_BASE + 0x04).equ RCC_APB2E...原创 2019-08-20 11:39:33 · 391 阅读 · 0 评论 -
stm32的程序在ROM和RAM中是如何运行的/在哪里执行的?
stm32中的Code在程序运行时要不要拷贝到RAM里执行呢?还是直接从Flash中取程序指令执行?不是nandflash不能运行程序吗?难道32里用的是norflash?处理器基本原理都相似,简单理解都是取指令、执行指令。那么从哪里取指令就涉及到存储介质了,ROM和RAM其实就是两种不同的存储介质(一个可以掉电保存,一个掉电不保存),他们都可以做为存储指令的介质。stm32默认就是...原创 2019-06-10 13:19:17 · 18478 阅读 · 5 评论