stm32
zd845101500
单片机、硬件设计、linux应用和驱动开发、搞机爱好者,尽量原创
展开
-
隔离4-20ma转PWM
原创 2024-03-22 21:34:46 · 96 阅读 · 0 评论 -
支持CAN通信和RS232的24bit ADC采集板
单片机使用stm32f103can芯片 TJA1050ADC芯片 ADS1256电压基准芯片 REF3020,2.048V电压供电使用LDO。原创 2024-02-19 11:17:56 · 244 阅读 · 0 评论 -
基于stm32F4 HAL固件库16BIT DAC AD5676驱动代码
【代码】基于stm32F4 HAL固件库16BIT DAC AD5676驱动代码。原创 2023-07-21 11:21:18 · 356 阅读 · 0 评论 -
LAN8720网卡掉线|PCB网络不稳定
阻抗特性:再高速网络信号中,PCB走线需要达到指定的阻抗值。差分线:网线输入输出分别由两条差分线构成。网线阻抗值:100ohm。原创 2023-07-07 14:16:44 · 665 阅读 · 0 评论 -
UCOS+LWIP启动流程分析记录
正点原子F429 网络实验源码功能分析。初始化流程如下,设置MAC信息变量和IP信息的变量。初始化网卡相关GPIO,ETH_Handler网络控制器外设初始化。DMA网络描述符内存申请,发送接收缓冲区内存申请。lwip中mem和memp的内存申请。设置网络相关信息 ip地址、网络掩码、网关、网卡接口初始化。//底层硬件初始化函数DMA网络描述符初始化,开启MAC和DMA。//设置netif为默认网口设置默认网卡的指针变量。原创 2023-01-18 11:15:50 · 690 阅读 · 0 评论 -
如何查看HAL库版本\stm32 HAL版本号
查看HAL版本原创 2022-12-06 09:48:05 · 1713 阅读 · 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 · 1625 阅读 · 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 · 2317 阅读 · 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 · 632 阅读 · 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 · 816 阅读 · 0 评论 -
IAR打不上断点是什么原因
解决方法1、project -> Clean,重新编译。2、Options ->C/C++ Compiler -> Optimizations -> Level 选择None原创 2021-01-06 15:22:00 · 1234 阅读 · 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 · 905 阅读 · 0 评论 -
st单片机的堆栈/内存分布
堆栈的作用:堆:全局变量,静态变量,以及内存管理所用的内存,都是属于"堆"栈:用于局部变量,函数调时现场保护和返回地址,函数的形参等查看堆栈的占用空间:堆栈在st内存中的分布采用默认设置栈0x400、堆0x200查看编译的map文件,ram占2104byte,栈顶指针指向0x20000838如图可看出堆的空间在0x2000 0000到0x2000 0434。栈的空间在0x2000 0438到0x2000 0838。...原创 2020-11-02 08:52:03 · 1063 阅读 · 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 · 3514 阅读 · 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 · 2137 阅读 · 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 · 6007 阅读 · 0 评论 -
stm32写flash报错FLASH_ERROR_PG
直接调用FLASH_ProgramWord();会返回FLASH_ERROR_PG的错误怎么办正确操作流程写数据基本流程为解锁-》擦除-》写入-》上锁,库函数都有对应的函数。报FLASH_ERROR_PG这个错误的原因是因为在写入前没有进行擦除。...原创 2020-09-08 13:55:32 · 4267 阅读 · 0 评论 -
寄存器1、怎么操作stm32寄存器/操作单片机寄存器
通过3个问题理解寄存器及其操作。什么是寄存器(就是个数字)?简单可以理解为能够通过软件改写数值、控制硬件的一个32bit的数字。多个数字一起控制一个外设。这个数值在哪?这个数字要被存起来,就一定有一个存储的地址,地址可以通过单片机的数据手册查到。如何改写这个数值?有了地址,可以设置一个指针指向此地址,然后写入数据。有库可以直接写寄存器名字进行操作。详细解读:1、什么是寄存器(就是个数字)?寄存器是实现软硬件的接口,几乎所有的硬件功能控制都是通过操作寄存器来实现的,..原创 2020-08-28 07:28:43 · 7792 阅读 · 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 · 2052 阅读 · 0 评论 -
IAR\ST-Link调试程序查看STM32单片机某段代码运行时间
需要知道某段代码的运行时间,有硬件的方法,也有软件的方法硬件方法:1:在测量起始点,反转电平2:在测量结束点,再次反转电平软件方法:1、在测量起始点和测量结束点设置断点2、进入调试模式,点击工具栏ST-Link→Data Log Summary→弹出的窗口右键Enable。3、运行程序到达测量起始点,会显示运行时间,再全速运行至结束点,时间差即为测量出的运行时间。没有验证过精度,要求不高的可以满足。...原创 2020-05-14 17:01:11 · 3247 阅读 · 2 评论 -
51/stm32单片机软件调试方法与技巧
常用单片机调试方式有仿真器、串口、屏幕显示。1、仿真器仿真IAR、keil等集成开发环境配合仿真器调试程序很适合单片机优点:可设置断点、实时查看内存等缺点:要有仿真器2、串口调试相较于仿真器仿真,串口调试不需要仿真器,在某些没有或者不能使用仿真器的系统上更实用,通用性更强。一般串口输出我们会使用重定向到串口的printf函数或者自定义的串口输出函数(比如:send_de...原创 2020-01-19 14:32:38 · 4517 阅读 · 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 · 7528 阅读 · 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 · 344 阅读 · 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 · 7888 阅读 · 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 · 1237 阅读 · 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 · 27305 阅读 · 3 评论 -
ESP8266/ESP-01上电体验/硬件连接
ESP-01模块引脚定义 1 GND GND 2 GPIO2 通用IO,内部已上拉 3 GPIO0 工作模式选择: 悬空:Flash Boot,工作模式 下拉:UART DownLoa...原创 2019-10-18 09:39:44 · 11283 阅读 · 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 · 3684 阅读 · 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 · 381 阅读 · 0 评论 -
JTAG接口针脚定义及含义
JTAG有10pin的、14pin的和20pin的,尽管引脚数和引脚的排列顺序不同,但是其中有一些引脚是一样的,各个引脚的定义如下。一、引脚定义Test Clock Input (TCK) -----强制要求1TCK在IEEE1149.1标准里是强制要求的。TCK为TAP的操作提供了一个独立的、基本的时钟信号,TAP的所有操作都是通过这个时钟信号来驱动的。Test Mode Sel...转载 2019-07-16 14:08:20 · 2600 阅读 · 0 评论 -
stm32在keil和IAR中的汇编启动代码不相同
最近学习cortex-A8内核的soc,在Linux环境下开发,从汇编到C、uboot分析移植。过程中发现,使用的汇编和keil中同是arm内核的stm32单片机的汇编不太相同。然后大概的查了一下是因为编译器不同。其实从stm32标准库中提供的文件我们就可以看出一这一问题的答案。在ST提供的标准库中提供了针对不同编译器的启动代码,如下图可以看出一共有针对4种编译工具的启动代码第...原创 2019-06-26 16:22:11 · 1738 阅读 · 1 评论 -
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 · 2259 阅读 · 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 · 726 阅读 · 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 · 1847 阅读 · 0 评论 -
stm32的程序在ROM和RAM中是如何运行的/在哪里执行的?
stm32中的Code在程序运行时要不要拷贝到RAM里执行呢?还是直接从Flash中取程序指令执行?不是nandflash不能运行程序吗?难道32里用的是norflash?处理器基本原理都相似,简单理解都是取指令、执行指令。那么从哪里取指令就涉及到存储介质了,ROM和RAM其实就是两种不同的存储介质(一个可以掉电保存,一个掉电不保存),他们都可以做为存储指令的介质。stm32默认就是...原创 2019-06-10 13:19:17 · 17866 阅读 · 5 评论