- 博客(32)
- 资源 (9)
- 收藏
- 关注
原创 AT32 bootloader程序与上位机程序
从8051到stm32, 从串口下载到JLINK调试,从keil到arm-none-eabi-gcc,从"Hello wrold"到通信协议,一路起来已学会很多,是时候写一下bootloader了。
2025-01-10 22:34:47
1262
原创 关于arm-none-eabi-gcc printf float问题
arm-none-eabi-gcc, printf, float, double
2023-03-13 16:13:23
779
原创 用NTC3950电阻控制DC-DC step-down SX2106实现温控调压
主要材料:1.NTC电阻,如NTC3950 10K2.DC/DC 电源芯片,如SX2106原理:1.NTC电阻阻值随温度变化而变化。NTC3950 温度公式:R(x) = 10ℯ^(3950 (1 / (x + 271.53014) - 1 / (273.15 + 25)))2.DC/DC电源芯片可以通过调整电阻阻值而改变输出电压。SX2106电压输出公式:V(x) = 0.805 (1 + R1 / (R(x) + R2))电路设计:输出曲线:.
2022-04-26 11:57:50
1606
原创 CH340E~STM32~ISP下载电路
CH340E内置晶振,且封装较小,对空间有限的地方较友好,但成本也相对高点。同时只RTS#一个可以控制的输出信号,较CH340G等其它信号少了DTR#信号线。如果同时都有DTR#和RTS#的话就可以分别控制STM32的NRST,BOOT0了。 CH340E 只有一个RTS#信号输出(CTS#只能输入),那就要换个思路了: RTS#先通过一个电容隔离来控制NRST复位,同时通过一个三极管来对另一个电容充电,电容又接到BOOT0。 由于电容充放电是需要时间的,所以当需要拉高BOOT0时,就通过拉低R...
2022-02-25 11:38:13
6554
8
原创 一键开关电路,短按开机,长按关机
主要工作流程:1.分别用三极管Q1、Q2控制P-MOS管Q3的通断。2.Q1控制Q2的通断。3.Q1、Q2的基极分别接一个启动电容C1、C2。 任一时刻按下开关S时,电源VCC都会对C1、C2进行充电,容值越大充电越慢。C1充满时Q1导通,Q1导通时,Q2会强制截止,Q2截止时,Q3也截止。C2充满时,Q2导通,Q2导通Q3就导通。4.当C1远大于C2时,结果就时短按开,长按关,一直长按先开后关。电路仿真地址:https://www.falstad.com/circuit/c...
2022-02-14 18:36:25
4362
原创 js javascript UTF-8 GB2312编码转换
在用js做项目时,接收方是要用GB2312的汉字编码,而发送方用的是UTF-8汉字编码。这里就要做汉字编码转换了。 网上找了一下午也没找到通用的方法,那只能自己做一个汉字编码对应表了。关键是要自己弄一个汉字编码对应表先按键GB2312汉字的编码顺序生成一个表,再把生成的GB2312表转向成UTF-8、UCS2-BigEndian,UCS-LittleEndian的表。那么同一个位置就是同一个汉字的编码了。var _GB2312_1_87=[0xA1A...
2021-12-28 15:13:54
14699
2
原创 怎么写CORTEX在windows用arm-none-eabi-gcc编译时的makefile
首先明白编译的目标文件是啥,搞单片机一般要用到的就是.hex,.bin,.elf. 而有了.elf就能转换成*.hex和*.bin.所以目标是生成*.elf文件,而elf文件是由*.o文件链接而成,.o文件是由.c,*.cpp, .s等文件生成。*#mermaid-svg-l6j2rQZ2GsEbuepo .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;c
2021-11-22 14:56:59
714
原创 inavFilter 惯导融合算法
typedef struct estimatorStruct { float pos[3]; float vel[3]; float acc[3]; }estimator_s;/** * @brief: 根据位置加速度来计算位置和速度 Inertial filter, implementation taken from PX4 implementation by Anton Babushkin <rk3dov@gmai...
2021-09-23 23:09:20
531
7
原创 飞控所有PID参数都无法消除振荡问题
原因:陀螺的数据滞后了。自己写飞控PID控制时发现,只要加一点点P时都会加速振荡,怎么修改P都无法达到稳定状态。首先怀疑的是电机的方向弄反了,把电机反向后,增加P能减少一点点的振荡次数,但也无法达到稳定状。同时也发现D的运算结果会有0交替出现。微分出现0,说明运算时,数据没有变化还时上次的数据,也就是说数据没有跟上。但是芯片手册上说这个陀螺仪是有200Hz输出的。然后去找原始数据。原始数据是根据状态寄存器的状态来判断,然而状态来的频率远没有达到200Hz,去掉状态判断直接拿...
2021-02-23 18:32:34
3383
1
原创 数字低通滤波算法及截止频率计算,pt1Filter,lpf
参考模电RC滤波计算公式来计算截止频率#define M_PI_FLOAT 3.14159265358979323846ftypedef struct LpfFilter{ float RC;//模电RC滤波的电阻和电容值的积 float dT;//数据更新时间隔(秒) float k;//滤波系数 float state;//滤波结果}LpfFilter_t;/**设置滤波的截止频率* *filter:* f_cut:截止频率* dt: 数据更
2021-02-21 21:16:30
9040
2
原创 undefined reference to `__errno‘ 解决办法
链接时加入 -specs=rdimon.specs -specs=nosys.specs“-lm -lc -lgcc”这几个有没有都无所谓,顺序更加无所谓!参考https://www.openstm32.org/forumthread1291#threadId3842
2020-11-30 22:05:07
4167
1
原创 AT32F415 USART1、2、3,DMA 用结构体统一配置收发
AT32F415 USART1、2、3,DMA收发1、串口1,2,3的收发原理都是一样的, 所以配置上都可以一起来,不同的地方再用指针引用。2、程序基本流程串口配置,DMA配置,接收时用空闲中断,发送时用发送中断来关闭DMA.(打开DMA后,串口的收发完成中断会对接到DMA的传输完成中断)3、串口缓存和DMA缓存用两个独立,防止接收时有冲突。4、接收时看空闲中断信号,有信号说明接收完了,把数据拿出来,DMA读数清零来重新接收,状态改为接收完成5、发送时要手动开启DMA传输,传输完成后会产生串口中
2020-08-31 17:37:04
3227
原创 windows10 强制关闭全屏游戏卡死的方法
玩游戏时,游戏卡死后会依旧强行占据在窗口的,按ALT+F4也没反应,就算ctrl+alt+del调出任务管理器也会被挡住,真的烦死了!!!!!!!!!!然后在网上搜索说新建一个桌面,再在新建的桌面上打开任务管理器会结束程序,然而打开任务管理器后,任务管理器会自动弹窗到第一桌面启动,可是第一桌面就是被游戏画片卡住的桌面,搞毛啊?!!!!什么鬼设定?!!!最后想起来了cmd的taskkill也能结束程序,那么就试试吧,不行主要重启了1、新建桌面:win+tab,选择新建桌面2、按win,在开始菜
2020-08-07 00:15:12
17241
1
原创 在windows 实现执行 makefile
需要安装软件:1.cygwin 实现make功能2.GNU Arm Embedded Toolchain Cortex-M编译工具链3.VS code 编辑代码。一、安装Cygwin1.下载Cygwinsetup-x86_64.exe:https://www.cygwin.com/2.安装Cygwin注意必选工具包:要新增工具包只要重新运行一下setup-x86_64.exe装完后试试make指令,出现下图表明make能用了二、安装...
2020-05-28 11:33:06
11625
原创 stm32 复位到内部bootloader
sm32的bootloader一般是通过开机时设置boot0=1来实现的。下面是通过程序来实现:原来的startup文件是直接把flash的数据加载到ram里面然后跑main函数循环bootloader的程序在0x1FFF D800那只要在进入main函数之前先判断是否要进入bootloader,如果要进入bootloader,就载入0x1fff d800这个地址就好了。否则就继续未修改之前的操作。void systemReset(void){ // Generate sys..
2020-05-20 17:50:46
1738
原创 无人机定高算法
高度控制:高于目标值时应该减速,要输出负值,所以高度差=目标高度-当前高度速度控制:向上时(速度为正)应该减速,要输出负值,所以速度差=高度差的速度-当前速度如果只有高度控制时:出现高度变化时,高度差要么是正数要么是负数。即使高度差会慢慢变小,但是高度差在没有有到达目标高度时,高度差的符号是不会变的,符号不变就一直加速,尽管加速度在变小,有加速就一定会越过目标值。越过目标值才会开始减速。在减速开始的瞬间,就意味着已经过越过目标点。高度差又出现了,再次重复上面的过程。所以不管怎么调PID参数,都不可能
2020-05-20 12:11:29
8540
8
原创 STM32 关闭全局中断
/** \brief Enable IRQ Interrupts This function enables IRQ interrupts by clearing the I-bit in the CPSR. Can only be executed in Privileged modes. */__attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_irq(void){ __ASM volatile ("cp.
2020-05-16 20:53:32
4870
原创 NRF24L01+ 自动重发,自动应答BUG
nrf24l01+有个失败自动重发,多次自动重发失败后会产生中断的功能。可是有个bug,就是达到了最大失败重发次数,清理MAX_RT中断后,立马转成转成接收模式,然后就会收到一个发送成功的标志。注意是 发送成功 标志,不是 接收成功 标志。可是上次不是多次重发都失败了吗,哪来的成功发送???...
2020-05-07 11:55:16
1700
原创 超声波定高--过滤突然出现的障碍物
超声波测到的数据会有一点毛刺,先用中值滤波,可以很好去掉突变太大的数据.为什么不用均值滤波呢,均值滤波对数据的实时性影响比较大. 对中值滤波后的数据做一定的统计,计算出数据的变化量和离散程度.我能想到的就是前后数据的差值,若干个数据的方差. 差值能直接反应数据的突变,方差能够强烈的反应数据的波动. 对数据进行判断,差值太大的不能要,方差太大的也不能要.这都说明超声波受到了明显的干扰:前方突然出...
2020-04-30 13:42:00
1422
原创 STM32 ISP 下载程序, C源码,
鉴于flymcu下载时有点慢,flash_loader.exe容易卡死的原因,所以决定自己写个串口编程和控制台程序。STM32_ISP的协议文档可以在st的官网上找到。先说下控制台的大致思路:程序的目标:把*.bin文件通过指定串口发送到stm32,stm32把收到的*.bin文件数据存到指定的flash地址。控制台这边要给的指令是:例如:COM4 256000 0X0800000...
2020-04-27 01:32:07
2453
2
原创 关于用串口IDLE中断,DMA_GetCurrDataCounter()函数值不变的问题
把STM32F103C8T6的USART1 RX配置成用DMA接收,再打开IDLED中断,然后再在IDLE中断时读取DMA的数据,这时就要去读取DMA_GetCurrDataCounter(DMA1_Channel5);有传输了多少人数据。但是,每次读到的数值都是不变的!!!可是DMA读出来的数据都是正确的。到底是什么原因呢。然后仔细观察数据时会发现,每次IDLE时读到的数据都是上一帧...
2020-04-24 18:12:18
6053
原创 CleanFlight 源码分析 一,任务调度
CleanerFlight的任务调度用的是时间片查询的方式。每个任务没有自己的堆栈,不会进行强行跳转。任何一个任务时间过长都会导致其它任务时间延迟(所以不要乱用Delay()).系统工作步骤:1.初始化任务列表2.任务循环调度任务系统就两个文件:scheduler.h,scheduler.c自定义任务:[TASK_SERIAL] = { .taskName ...
2020-04-17 15:52:56
816
原创 GCC 链接时出现undefined reference to “...”时可能解决办法
undefined reference to “...”顾名思义就是没找到,没找到的原因有两个1.不存在。不存在就想办法加进去。2.找错地方。GCC链接时的特点是按顺序连接的,重点:按顺序!顺序!序!比如有三个库:A,B,C:A调用了B, B调用了C,那么链接的顺序必须是: 先链接A,再链接B,再链接C.如果不是这个顺序,就会出现undefined re...
2020-03-24 11:58:22
3475
原创 用Visual Studio 2019 开发stm32,cortex-m3, arm
1.下载Visual Studio Community 2019https://visualstudio.microsoft.com/zh-hans/vs/2.添加vs上面的Linux工具,cmake工具,IOT开发工具3.stm32工程配置不推荐使用stm32 cubex生成的makefile工程,因为我试过好多次编译出来的bin文件都不能运行,不知道为什么......
2019-11-25 20:44:44
22549
22
原创 LT8920无线通讯程序
LT8920是一超便宜的2.4GHz无线芯片,用来做小东西非常不错,废话不多说,直接上代码#include "stc8_spi.h"#include <intrins.h>#include "lt8920.h"#include "delay.h"#include <stdio.h>#include <string.h>xdata u8 tx_b...
2019-07-01 19:57:29
7007
7
原创 NTC温度检测程序
NTC公式:RT = RN *EXP(B*(1/T-1/TN))对上面的公式解释如下:1. RT 是热敏电阻的当前阻值;2. R是热敏电阻在TN常温下的标称阻值;3. B值是热敏电阻的温度系数;4. EXP是e的n次方;5. 这里T和TN指的是K度即开尔文温度,K度=273.15(绝对温度)+摄氏度;6....
2019-07-01 19:55:02
22441
22
原创 AM2320 温湿度计 单总线读取数据
温湿度计 用单总线方式读取数据AM2320支持IIC通信和单总线通信,这里只用单总线:使用单总线时的接线方式时,只需接第二引脚SDA,SCL接地就行。通信时序图:由时序可见通信非常简单,关键点要把握好每个时序的时间。程序思路:1.握手:先是发送0.8~20ms的开始信号,然后等待AM2320的应答,要确保应答信号是先是80us的低电平...
2017-06-02 17:38:39
8934
3
转载 关于华硕主板“USB Devices Over Current Status Detected!”
在连续玩了4~5个小时游戏之后,电脑突然死了,然后闻到一股烧焦味,之后开机出现了:please enter setup to recover BIOS setting USB Device Over Current Status Detected !!System Will Shut Down After 15 Seconds.” 去百度找了一下,usb device over c
2017-05-19 11:05:21
31434
GB2312_UTF8.c
2022-01-13
C51_CMAKE_TEMPLETE.rar
2020-07-03
stm32_isp_programmer_source.zip
2020-04-27
VS2019_IOT_STM32_templete.rar
2019-11-26
NRF24L01Receiver.rar
2019-07-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人