![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
嵌入式
文章平均质量分 51
stm32开发应用
王纯配
我的办公桌上有一个记事本,写写画画,上面有我思考的痕迹;我的电脑上有一个工作日志,敲敲打打,用来总结每天的工作。当记录成为习惯,时间也就成了永恒。
展开
-
分享一组惠斯通电桥温度补偿前后的图像
1、全桥是半导体应变片组成的惠斯通全桥2、数据采集用24bit ADC;图1是没有温度补偿的图,左侧是采集的全桥输出电压转换的ADC值,X轴是时间。温度变化1°C,ADC值波动了大概3900个bit。图1 没有温度补偿图2是全桥经过温度补偿后的曲线,同样温度变化1°C,ADC值波动量是100个bit左右。可以看出温度补偿后全桥变得更加稳定。图2 有温度补偿图3是没有做温度补偿时降温曲线,温差4°C,全桥的输出ADC变化量大概是17000个bit左右图3 没有温度补原创 2022-05-20 19:33:44 · 1525 阅读 · 0 评论 -
利用放大器搭建信号反转电路
一些应用想要实现这样的功能:输入是递增的,而输出是递减的,比如输入0-5V,输出5-0V,下面的参考设计就是实现这样的功能。实现的核心思路是将放大器的正向输入用两个相等电阻分压得到vcc/2。为什么是vcc/2呢?可以利用虚短虚断列出反向放大器的关系式,根据设定的结果反推正向输入端的电压。如果放大器不是轨到轨类型的,输出电压会不输入略低一些。用的仿真软件是TI公司的TINA电路仿真源文件https://download.csdn.net/download/aqwtyyh/67346608htt.原创 2021-12-20 10:37:39 · 972 阅读 · 0 评论 -
纳米级3D形貌扫描
原创 2021-12-16 09:54:25 · 297 阅读 · 0 评论 -
亚纳米级3D形貌扫描
原创 2021-12-16 09:52:51 · 308 阅读 · 0 评论 -
图文介绍STM32L4读写内部flash
型号:STM32L431KBU6;改型号内存 = 128KB,起始地址 = 0x0800_0000;只有63页;在L4的user manual手册的第三章详细介绍了FLASH的操作细节,我挑一些重要的信息;flash擦除方式有两种:1、Page erase—以页位单位擦除,1页=2K,每次最少擦除1页;2、Mass erase—擦除整个flash;比较重要的信息是flash的写操作只能是双字(double word,64bit),写完第一个字,再写第二个字。下面贴..原创 2021-12-10 20:53:11 · 6181 阅读 · 6 评论 -
FPGA驱动32bitADC-ADS1262Part2——Verilog驱动核心代码
1、我采用的驱动方式是:发送命令控制转换。2、先发送“RESET”命令,如果不写reset的话,下载程序后adc不能工作,必须将程序固化重上电才能adc才能正常工作。3、配置的寄存器有:POWER,INTERFACE,MODE0,MODE1,MODE2,INPMUX,REFMUX;4、重要的是:你必须懂得如何用Verilog实现spi的操作;5、该ADC配置寄存器的方式有两种:datasheet中有对读写指令RREG和WREG有详细解释;——a、利用“group方式”批量依次写入寄存器数据原创 2021-10-30 22:18:16 · 1584 阅读 · 8 评论 -
STM32驱动ADC124S051(HAL库)源码——升级版
MCU型号:stm32f103c8t6;ADC信号:ADC124S051,12bit;提供的示例代码是读取3个通道的数据;我使用这颗芯片时遇到的问题:只读取一个通道没问题。如果连续读取>=2个通道的话,通道数据会错开。比如代码里写的是读取A通道,但实际上是B通道数据。如果是4通道连续读取的话,好像是A读的是B,B读的C,C读的D,D读的是A,就类似这样错开。代码写完后我会实际读取数据调试一下,把错位的数据纠正过来。以下是源码:HAL库方式,SPI的“DATASIZE”配置成16bit,这.原创 2021-01-22 20:18:12 · 763 阅读 · 2 评论 -
光栅编码器闭环运动重复定位时偶尔出现20um误差原因分析
用的光栅尺栅距是20um,误差刚好是一个栅距,要么尺子有问题,要么计算错误,重复运动同一个位置,不是每次都出错,很显然是计算错误。当出现误差时读取此时用于计算的光栅信号sincos数据,用matlab plot一下,选取了三张比较常见的错误数据的图像。从图1-图3可以看出参与计算的sincos数据出现了坏点,看起来有数据丢了,才会出现红色框中那种不规则图形。那么造成这种丢数据的原因是什么?首先理清整个系统的框架,每个环节数据是怎么交换的。我的系统数据交换如下图。定位平台控制器有3路,XYZ.原创 2020-11-05 17:33:16 · 1401 阅读 · 0 评论 -
STM32的硬件CRC功能使用和软件实现CRC校验相关博客文章整理
汇总搜索的CRC校验相关的博客文章,从中收益,记录下来方便以后查阅。关于STM32F4xx的硬件CRC32校验STM32的硬件CRCstm32学习之CRC-32校验STM32F10x 学习笔记3(CRC计算单元)CRC8校验CRC8算法原创 2020-10-19 22:16:25 · 1663 阅读 · 1 评论 -
巧用STM32串口DMA的normal和circular模式,达到并行执行效果
芯片型号:stm32f103rct6;SPI接口ADC;代码功能描述:有xyz3路数据,每路1个双通道adc采集,从x路依次数据并用串口发送出去,14字节,2250000bps;方案1:按照顺序执行,依次采集各路数据,然后uart发送。这样也行,但是我不喜欢,这样会影响数据更新的速率,就拿x路来说,要等yz路,串口发送都完成了,x路才开始下一次数据采集。我的目的是尽量提高各路数据更新的速率。方案1不满足。方案2:考虑用DMA发送,释放CPU。DMA有normal和circular..原创 2020-10-16 16:36:30 · 16155 阅读 · 7 评论 -
STM32的UART使用DMA操作不要入的坑
UART发送:HAL_UART_Transmit_DMA(&huat1,tx_data, 6);在完成各种初始化之后(或者是进入while之前)调用一次这个UART dma发送函数就可以不用管了。变量“tx_data”是在while()里实时更新的,这个串口dma发送函数不管你"tx_data"有没有更新,只要上一帧数据发送完毕,就接着发一下。所以就有问题了,有时候tx_data更新了一半,就被DMA挪走发送了。就比如说上次计算的值是1,那么 int32_t tx_data=0x0001;这次.原创 2020-05-10 22:48:40 · 6066 阅读 · 5 评论 -
STM32F1 HAL库开发——关掉和开启SPI中断
从机要实现的功能是:SPI1接收到一帧数据(e.g 6bytes)进入回调函数中,关掉SPI1中断——>数据处理+uart发送——>开启SPI1中断,等待下一次数据接收。库函数方法:SPI_I2S_ITConfig(SPI1,SPI_I2S_IT_RXNE,DISABLE);…数据处理…SPI_I2S_ITConfig(SPI1,SPI_I2S_IT_RXNE,ENABLE);HAL库方法__HAL_SPI_DISABLE_IT(&hspi1, SPI_IT_RXNE);.原创 2020-05-10 22:33:15 · 3645 阅读 · 1 评论 -
两片STM32之间在高倍波特率下进行uart数据通信
项目背景需要用到两片stm32f103rct6进行UART串口单工通信,只需要从A发到B,通信的波特率越快越好。stm32的uart最大通信波特率可以达到4.5MBit/s;通信帧格式帧头0xAA状态表示1Byte数据位12Byte共14个Byte,无帧尾;通信实验遇到的问题实验平台:cubeMX+visual GDB+USB虚拟串口;在CubeMX中配...原创 2020-04-05 22:27:25 · 3047 阅读 · 6 评论 -
干货—花钱都买不来的光栅编码器高倍细分算法—基础篇(图文)
光栅编码器高倍细分算法原理背景知识光栅编码器原理编码器种类光栅编码器输出信号类型开发平台介绍硬件电路设计细分算法原理(核心)辩向思想(重点及难点)细分步骤总结(详细)细分误差原因分析及解决方案光栅尺闭环运动PID控制总结与展望背景知识光栅编码器原理编码器种类光栅编码器输出信号类型开发平台介绍硬件电路设计细分算法原理(核心)辩向思想(重点及难点)细分步骤总结(详细)细分误差原因分...原创 2020-03-29 16:31:53 · 6319 阅读 · 15 评论 -
原子力显微镜AFM图像处理软件Gwyddion使用教程(图文)
Gwyddion使用教程Gwyddion简介Gwyddion user guide下载地址本次教程用的AFM扫描图像下载地址AFM/STM校准样品Gwyddion使用step1step2step3step4step5step6step7step8你没见过的CD磁道到底长啥样一张图总结Gwyddion简介 &nbs...原创 2020-03-28 15:33:37 · 42387 阅读 · 5 评论 -
visualGDB开发stm32——16进制转10进制代码
uint32_t Convert_16hex_to_10dec(uint8_t d1, uint8_t d2, uint8_t d3){ uint32_t num; num = d1 * 65536 + d2 * 256 + d3 * 1; return num;}d1,d2,d3是3个字节,从高位到低位。e.g. 5_000_000 = 0x4C4B40; d1...原创 2019-11-30 16:23:33 · 3025 阅读 · 0 评论 -
USB芯片选型
做USB两个星期了,找了一些芯片,发现到处都没有人总结,找得挺辛苦的,这里发一下我的劳动成果,为后来人省点事吧。 USB1.1: CH375 有HOST和SLAVE两种方式,即可以当主机去控制别的USB设备,如U盘等,又可以被PC控制。 CH372 只有设备模式,不能控制别的USB设备 USB2.0: 内部不含单片机核的USB芯片:CY7C6800转载 2017-12-01 12:28:14 · 1187 阅读 · 0 评论 -
单片机:C语言实验SPI通信-读写操作
/*SPI通信,发送:先高后低;接收:先高后低;*//*函数名:spi_write();工作过程:上升沿写数据,每次写入1bit*/void spi_write(uint8 spi_data){uint i;spi_cs = 0;sck = 0;for(i=0;i{if(spi_data & 0x80)//判断最高位,先发送最高位mo原创 2017-02-06 18:17:05 · 15229 阅读 · 5 评论 -
ADC124S051驱动代码(HAL库)—4通道数据读取(有部分注释)
#include "ADC124S051.h"#include "stm32f1xx_hal.h"#include "define.h"#include "delay.h"uint32_t *ADC_read_multiple_channel(uint8_t chipselcet) //这个参数片选,我的板子上有多个ADC所以要有个片选 static uint32_t va...原创 2019-10-31 21:35:42 · 751 阅读 · 0 评论 -
Visual Studio 开发STM32实现USB虚拟串口功能——方法1
有三种方法可以在visual studio上实现USB虚拟串口功能。 用到的工具有:visual studio2012;keil5;stm32CubeMX5.3.0; 使用的STM32芯片是:STM32F103C8T6;SWD下载模式; 因为我喜欢visual studio的编辑环境,所以不用keil开发stm32; 我想达到的目的是...原创 2019-08-22 10:17:41 · 2052 阅读 · 2 评论 -
Visual Studio 开发STM32实现USB虚拟串口功能——方法2 使用stm32CubeMX完成USB配置
有三种方法可以在visual studio上实现USB虚拟串口功能。 用到的工具有:visual studio2012;keil5;stm32CubeMX5.3.0; 使用的STM32芯片是:STM32F103C8T6;SWD下载模式; 因为我喜欢visual studio的编辑环境,所以不用keil开发stm32; 我想达到的目的是...原创 2019-08-22 14:10:36 · 6247 阅读 · 1 评论 -
Visual Studio 开发STM32实现USB虚拟串口功能——方法3 Keil工程移植到Visual Studio
方法2的方法是visual studio直接导进来keil工程,这样做的一个缺点就是: 1、生成是vs工程目录太乱; 2、keil在编译后.c文件下都会包括用到的.h文件,可以查看到.h文件的内容,但是vs编译后.c文件下并不会包括.h文件,这样在vs里是看不到导进来的.h文件。而且在.h路径方面,vs跟keil设置的路径是一样的,导致vs工程不能单独移动,得带着整个CubeMX工程一起移动,...原创 2019-08-22 14:26:40 · 2256 阅读 · 4 评论 -
Visual GDB不能在线调试,出现Received a SIGTRAP:Trace/breakpoint trap
用visual GDB在线调试stm32代码时,出现错误信息:Error: jtag status contains invalid mode value - communication failure;同时弹出一个对话框提示:Received a SIGTRAP:Trace/breakpoint trap; 原因是:stm32代码初始化时寄存器没有设置en...原创 2019-08-22 17:15:09 · 10000 阅读 · 3 评论 -
ADC124S051驱动代码编写-HAL库-USB虚拟串口发送
1、HAL库方式写的代码;USB虚拟串口发送;2、USB虚拟串口发送方式在串口助手上没法显示十进制数据,我就专门写了一个显示十进制的助手,我自己用,不嫌弃的话就联系我要。我的还可以是实时显示数据波形哦。3、数据发送给串口部分的代码没贴,只贴了核心的单通道和4通道 数据读取代码;//定义通道选择#define CH1 0B00000000#define CH2 0B000010...原创 2019-09-01 12:10:00 · 1208 阅读 · 0 评论 -
用C语言表达增量式PID和位置式PID理论公式
/**************************************************************************函数功能:增量PI控制器入口参数:编码器测量值,目标速度返回 值:电机PWM根据增量式离散PID公式 pwm+=Kp[e(k)-e(k-1)]+Ki*e(k)+Kd[e(k)-2e(k-1)+e(k-2)]e(k)代表本次偏差 e(...转载 2019-07-31 17:52:11 · 2659 阅读 · 0 评论