自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ApexYuan

Learn & Share

  • 博客(77)
  • 资源 (8)
  • 论坛 (1)
  • 收藏
  • 关注

原创 STM32 HAL+PWM+DMA方式驱动WS2812灯珠波形分析

通过示波器观察PWM+DMA的方式驱动WS2812灯珠的波形及分析对应的现象文章目录1. 在DMA传送完PWM波形后不关闭PWM的DMA输出2. 在DMA传送完PWM波形后,在PWM传输完成后回调函数中关闭PWM的DMA输出3. 在DMA传送完PWM波形后,在DMA中断函数中关闭PWM的DMA输出分析1. 在DMA传送完PWM波形后不关闭PWM的DMA输出灯珠显示效果:灯珠会错乱显示(没有按正常设定的颜色显示)示波器显示如下:2. 在DMA传送完PWM波形后,在PWM传输完成后回调函数中关闭P

2020-11-11 18:48:15 44

原创 STM32 BUG记录

STM32 BUG 记录STM32F429芯片的PA1和PA2引脚无法输出PWM波PA1: TIM2_CH2 TIM5_CH2PA2: TIM2_CH3 TIM5_CH3 TIM9_CH1HAL库和标准库都进行了测试,配置成以上可以配置的定时器和通道都不能够输出PWM波。将TIM2_CH2和TIM2_CH3分别映射到PB3和PB10引脚便可以正常输出PWM波。...

2020-11-10 16:22:56 13

原创 STM32 HAL 详述串口收发的所有方式

STM32 HAL 详述串口收发的所有方式文章目录STM32 HAL 详述串口收发的所有方式串口收发方式串口发送轮询发送中断发送DMA发送串口接收轮询接收中断接收中断+IDLE接收DMA+IDLE接收正常DMA循环DMA附注串口收发方式串口收发的使用无外乎下面这些使用方式#mermaid-svg-4J50cdASYQdah8Pb .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-famil

2020-10-31 10:32:33 27

原创 对比无源蜂鸣器和有源蜂鸣器

区别这里的有源和无源的“源”是指的是“震荡源”,即有源蜂鸣器内部带震荡源,只要通电就可以发出声音,而无源蜂鸣器需要用方波驱动才可以发出声音。区分看外观 :如果将两种蜂鸣器的引脚均朝上放置时,可以看出有绿色电路板的一种是无源蜂鸣器,用黑胶封闭的一种是有源蜂鸣器。万用表测电阻:用黑表笔接蜂鸣器 "+"引脚,红表笔在另一引脚上来回碰触,如果触发出咔、咔声的且电阻只有8Ω(或16Ω)的是无源蜂鸣器;如果能发出持续声音的,且电阻在几百欧以上的,是有源蜂鸣器。优缺点无源蜂鸣器:便宜、声音频率可控(需

2020-09-28 09:57:54 31

原创 stm32 bootloader启动正常,APP程序会在时钟配置出错原因分析

实验环境STM32F411芯片HAL库利用CubeMX生成的Bootloader和APP工程现象描述将Bootloader和APP程序分别下载到板子上,发现程序会死在Error_Handler()的while(1)循环中。具体调试发现程序是在执行HAL_RCC_OscConfig()函数的PLL 配置部分检测到当前PLL已经被配置为了系统时钟而返回了HAL_ERROR的返回值导致进入了Error_Handler()。分析网上搜索了一下,发现了一种说法:PLL在启动之后便不能够重新配置。为

2020-09-24 13:59:24 36

原创 KeilMDK不支持二进制表示解决方法

在移植WS2812FX库时遇到了一些报错,最终的报错指向了一些定义的二进制表示的宏,还以为是那个地方语句写错了,上网搜了一下竟然是Keil MDK不支持二进制表示。这里直接从Arduino库里复制了一份binary.h文件到自己的工程中便很好的解决了这个问题。在此记录一下,方便后面遇到类似问题时可以快速解决。binary.h/* binary.h - Definitions for binary constants Copyright (c) 2006 David A. Mellis. Al

2020-09-21 13:51:53 115

原创 WS2812灯珠(六)---移植WS2812FX库

移植WS2812FX库该库实现了比Adafruit_NeoPixel库更丰富的显示效果,且该库的实现是建立在Adafruit_NeoPixel库的基础上实现的。这里的移植是基于STM32 Keil MDK实现的(其他平台未测试)。移植原则移植需要用到的变量,这里全部声明为static,外部函数需要使用其变量时必须通过函数的方式访问。为所有向外提供使用的函数统一添加Adafruit_NeoPixel_的前缀,既便于识别又不会和其他文件函数产生重名冲突。当函数存在重载情形时将重载函数的不一致参数组合

2020-09-21 13:43:34 147

原创 WS2812灯珠(五)---移植Adafruit_NeoPixel库

将Adafruit_NeoPixel库移植为C版本Adafruit_NeoPixel库为实现WS2812类似系列的灯珠实现非常酷炫的效果提供了各种接口函数,应用层可以很方便的利用这些接口函数实现各种丰富的显示效果。Adafruit_NeoPixel库提供的example中包含了很多炫酷效果的例程,实现更加丰富效果的WS2812FX库便是利用Adafruit_NeoPixel库的基础上实现的。这里将其移植为C语言版本可以更广泛的应用到嵌入式平台上,也为后续移植WS2812FX库打下铺垫。移植原则:移

2020-09-21 13:20:16 1011

原创 STM32使用过程中的踩坑记录

记调试步进电机加速减速过程的一次大坑。

2020-07-27 15:52:11 77

原创 I2C学习笔记---基于手册一步步实现软件I2C

I2C学习笔记文章目录I2C学习笔记一、学习《I2C总线规范》I2C总线特征:重要知识点数据传输二、实现软件I2C实现1. 预处理2. `i2c_init()`3. `i2c_start()`4.`i2c_stop()``5.i2c_ack() i2c_nack()`6. `i2c_waitACK()`7.`i2c_writeByte()`8.`i2c_readByte()`测试总结一、学习《I2C总线规范》I2C总线特征:两条总线:一条串行数据线(SDA);一条串行时钟线(SCL)传输速率:

2020-07-18 16:03:07 213

原创 如何学习计算机科学(个人见解)

如何学习计算机科学(个人见解)简介人类社会中一切的发展过程都遵循从简单到复杂的规律,人的学习也是一样,也遵循着这样的规律。经过长时间的发展,现代社会已经变得非常庞大且复杂。科技发展日新月异,需要学习的东西越来越多,也越来越复杂,致使一个人不可能把所有的东西都学会。这里单纯就学习计算机科学谈一点自己的见解。经历我原本学习的是机械专业,学习过C语言后面又接触过飞思卡尔,基于现有库的基础上编写程...

2020-04-17 16:19:56 210

原创 对PID理解的一些困惑

一、认识PID在学习PID的时候,会猛然接触到很多概念,导致对PID认识不清。刚学习PID时会一下接触到PID、数字PID、增量式PID和位置式PID等概念,让人感觉到PID很复杂,但其实本质上PID的公式就只有一个,其他只是为了不同场合应用的变式,其本质还是一样的。原始PID公式:u(t)=KP(e(t)+1TI∫e(t)dt+TDde(t)dt)u(t)=K_P(e(t)+\frac{...

2020-03-31 09:59:19 170

翻译 改善初学者的PID

文章目录一、简介初学者的PID二、采样时间问题解决方案代码结果关于中断的旁注三、微分冲击问题解决方案代码结果四、动态调整参数问题解决方案代码结果五、积分饱和问题解决方案---步骤1(积分限幅)解决方案---步骤2(输出限幅)代码结果六、开/关PID控制问题解决方案结果七、初始化问题解决方案代码结果更新:为什么ITerm = 0?八、方向问题解决方案代码PID完成九、测量比例---代码第一遍修改–初...

2020-03-31 08:30:34 148

翻译 改善初学者的PID(一)---简介

改善初学者的PID(一)—简介文章目录改善初学者的PID(一)---简介一、简介初学者的PID一、简介结合新的Arduino PID库的发布,我决定发布此系列文章。 最后一个库虽然可靠,但实际上并没有任何代码说明。 这次围绕该计划详细解释代码为何如此。 我希望这对两类人有用:直接对Arduino PID库中发生的事情感兴趣的人将获得详细说明。任何编写自己的PID算法的人都可以看看...

2020-03-31 08:23:05 126

原创 关于嵌入式编程的思考

现在的嵌入式编程,代码基本都是在各自为战。每个开发者都会实现自己的底层驱动接口和应用接口,很难想arduino那样形成了一套非常完整的生态体系。正是由于arduino统一的框架和完整的生态,以至于大部分开源的的优秀嵌入式项目都是基于arduino开发的。大喜欢单片机又不喜欢arduino的人,可能会有这样的想法:arduino屏蔽了底层代码,学不到什么东西arduino效率低下…上面...

2020-03-28 09:33:25 112

原创 python实现bin2c

参考链接:https://www.cnblogs.com/gwb-tech-blog/p/6500763.html功能:将二进制文件转化成常量数组的形式存储,并输出到目标文件中作用:为我们在一些没有文件系统不能调用fopen、fread之类的工程中提供了便利,我们可以以常量数组的形式去访问这些常量数据。#!/usr/bin/env python3def readBinFile(fil...

2020-03-25 10:16:11 50

原创 Python学习笔记

基于python3一、简介Python是一种解释性、交互式、面向对象的脚本语言。Python 是由 Guido van Rossum 在八十年代末和九十年代初,在荷兰国家数学和计算机科学研究所设计出来的。二、环境搭建安装PythonPython环境变量变量名描述PYTHONPATHPYTHONPATH是Python搜索路径,默认我们import的模块都会从PYTH...

2020-03-24 18:04:47 185

原创 ESP3D使用方法

https://nathan.vertile.com/blog/2019/01/03/esp3d-wifi-enable-your-3d-printer/

2020-03-19 09:23:51 759

原创 彻底搞清printf在STM32上的使用

彻底搞清printf在STM32上的使用文章目录彻底搞清`printf`在`STM32`上的使用重定向`printf`ARMCC版本(keil MDK)ARMGCC版本(GCC)重写`printf`重定向printfARMCC版本(keil MDK)下面这段代码,在实现串口发送一个字节的函数后,可以在勾不勾选”微库“的情况下都可以正常使用printf函数。__MICROLIB是勾选微库后会...

2020-03-13 17:20:38 1085

原创 利用#undef实现特定模块的调试输出

利用#undef实现特定模块的调试输出Preface在平时的编程中肯定会用到打印功能来调试自己的程序,调试的时候将打印函数取消注释,在调试完成后将打印函数注释掉。不知大家是如何处理的,我以前可一直是这么干的。这样处理第一太繁琐,第二影响程序的美观性。后面想了一个用#if ... #endif语法来封装printf函数的做法:#if DEBUG_MOUDEL print("debug mou...

2020-03-11 10:40:06 111

原创 STM32F407_HAL_TIM_DMA驱动WS2812

STM32F407_HAL_TIM_DMA驱动WS2812初始化函数可以通过CubeMX配置,这里直接通过原码记录:芯片外设层驱动tim.h#ifndef __TIM_H#define __TIM_H#include "stm32f4xx.h"extern TIM_HandleTypeDef htim3;void HAL_TIM_MspPostInit(TIM_Handl...

2020-03-10 18:20:14 822 4

原创 C语言知识点---局部数组的长度可用变量表示

C语言知识点—局部数组的长度可以用变量来定义首先我们知道C语言中,全局数组在定义的时候必须给定长度,而且长度必须是常量。一直没注意函数内部的局部数组在定义的时候长度可以为变量。具体见下例:#include <stdio.h>#include <stdint.h>int main(void){ int a = 5; uint8_t tmp[a]; ...

2020-03-10 17:28:58 277

原创 串口协议包的接收及解析处理

串口协议包的接收及解析处理串口是单片机应用中应用最多的外设之一。很多电子硬件都会提供串口,如蓝牙模块、WIFI模块、串口屏等。如果我们想开发基于串口通信的产品或使用基于串口通信的电子硬件时,都避不开通信协议。通信协议通信协议听起来很抽象,实际他就是两个通信设备之间交流的纽带。例如我们两个人互相对话,这就是一个通信的过程,为什么我们可以听懂对方的话,因为我们说的都是汉语,汉语就是我们之间的通信...

2020-03-10 15:34:07 1019 2

原创 STM32HAL库串口处理---中断收发

STM32HAL库串口处理—中断收发文章目录STM32HAL库串口处理---中断收发Arduino串口机制的接口函数代码实现编写硬件层MSP支持代码定义新的串口结构体接口函数实现实例化对象`serial_init()``serial_available()``serial_peek()``serial_read()``availableWrite()``serial_flush``serial_...

2020-03-05 21:57:39 742

原创 STM32HAL库微秒延时函数的实现---DWT和SysTick

文章目录STM32 HAL库微秒延时函数的实现利用SysTick再实现微秒延时函数利用DWT(数据观测点)实现微秒延时函数`dwt.h`文件`dwt.c`文件`delayMicroseconds()`函数结论在这里插入图片描述结论STM32 HAL库微秒延时函数的实现天下苦STM32 HAL库微秒延时久已。不占用其他定时器资源又不使用循环的方式就不能实现微秒延时函数了吗?答案是否定的,我们还有...

2020-03-05 08:59:30 1693

原创 Arduino_Core_STM32---pinMode()实现分析

Arduino_Core_STM32—pinMode()实现分析pinMode()定义Arduino平台的易于使用性主要就体现在屏蔽的大量底层细节的实现,对于该函数来说也不例外。虽然该函数只有两个参数(arduino引脚号和模式),但这两个参数需要多层的映射才能转化为具体适合STM32芯片的配置信息,并调用底层接口完成配置。从下面源码中可以看出主要由两个函数来完成引脚模式配置的:digita...

2020-03-03 18:21:38 520

原创 marlin2.0应用到STM32实践(续)

前言在上篇内容中主要介绍了marlin2.0安装到已有开发板的实例。这篇内容将通过marlin2.0安装到BLACK_STM32F407VE开发板的实践介绍如何为新定制的开发板烧入固件并详细介绍前期的处理过程,希望能为那些想深入固件研究苦于不会编译安装和想绘制3D打印机开发板又不知如何烧录固件的marlin爱好者一些帮助。BLACK_STM32F407VE开发板的硬件开源资料链接:https:...

2020-02-28 16:16:09 3009 9

翻译 Arduino内核解读---Printable类、yiled()函数、引脚映射

这篇文章来自于https://atadiat.com/en/e-yield-function-printable-class-mapping-arrays-useful-arduino-core/,文章讲解了Arduino内核的一些特性,对于深入理解Arduino非常有帮助。前言Arduino core 是Arduino API函数和类的源代码,有三个可以被有效使用的功能。由于Arduino内...

2020-02-27 18:30:34 242

原创 marlin2.0应用到STM32实践

简介marlin2.0固件支持32位的单片机平台,相信很多人都跃跃欲试了吧!相信看文章的大多数人都会有自己的STM32开发板(并不是针对于3D打印的开发板),我们手头的这个开发板便可以用来测试marlin2.0固件了。这里的主要目的是教会大家如何修改IO端口配置,如何编译,如何下载,并通过串口简单的测试代码是否运行,至于真正的上机测试需要连接的线太多固就放弃了(放弃并不是说上机打印会有问题)。...

2020-02-11 17:33:14 5687 6

原创 浅谈Marlin2.0

简介marlin固件至今已有三个比较重大的版本:1.0,1.1,2.0。marlin1.0,1.1版本的固件已经停止更新,marlin2.0版本的固件已经有正式版发布了。最初marlin1.0,1.1固件主要应用在基于arduino的单片机上,主要工作在于修复bug添加新功能,工程结构不是很清晰。对于marlin固件只能应用在基于arduino的单片机上,很多人不满足于此,一直想将marlin...

2020-02-11 11:21:29 5186 2

原创 平衡车制作---原理篇

平衡车制作—原理篇文章目录平衡车制作---原理篇前言直立控制直观感受内部机理速度控制方向控制总结前言本篇教程内容主要来自于《直立平衡车模参考设计方案》,且这里是从概念层面讲述的并没有具体的控制理论方面的内容。有了这些概念方面的知识制作一个初级版的平衡车已经足够了。直立控制直观感受悄悄告诉你个秘密:其实你天生就已经知道了直立控制的原理。不信的话,你用手指撑个木棍就知道了,这其中已经包含...

2020-01-07 16:04:55 871

原创 Rosbridge学习

rosbridgerosbridge(rosbridge_suite):一个用于非ROS系统和ROS系统进行交互的通信的功能包。rosbridge主要包含两个部分Rosbridge Protocol和Rosbridge Implementation。Rosbridge Protocol协议部分主要提供了非ROS系统和ROS系统通信的具体格式(JSON格式),包括订阅发布主题、服务调用,获取...

2019-12-25 17:50:32 146

原创 FreeRTOS学习笔记(一)---裸机系统与多任务系统

FreeRTOS学习笔记一、裸机系统与多任务系统裸机系统裸机系统通常分为轮询系统和前后台系统。轮询系统在死循环中依次处理各种事情前后台系统在轮询系统的基础上加入了中断,外部事件的响应在中断(前台)里面完成,事件的处理在轮询系统(后台)中完成。多任务系统相比于前后台系统,外部事件的响应也是在中断中完成,但事件的处理是在任务中完成的。这里的任务跟中断一样也具有优先级,由操作系统调度管...

2019-12-25 17:48:34 109

原创 STM32学习笔记(八)---通讯基本知识

通讯的基本知识一、通讯的分类按数据传送的方式分a. 串行通讯:按数据位形式一位一位地传输数据b. 并行通讯:使用8、16、32及64根或更多的数据线进行传输按数据通讯的方向分a. 全双工:同一时刻,两个设备之间可以同时收发数据b. 半双工:同一时刻,两个设备之间不能同时收发数据c. 单工:任何时刻,只能进行单一方向通讯按数据同步的方式分a. 同步通讯:收发双方会使...

2019-12-24 12:50:21 71

原创 STM32学习笔记(七)---SysTick

STM32学习笔记(七)—SysTick文章目录STM32学习笔记(七)---SysTick一、SysTick简介二、SysTick功能框图三、SysTick寄存器四、SYSTICK使用1.中断方式使用2.轮询方式使用五、参考资料:五、参考资料:一、SysTick简介SysTick属于CM4内核中的一个外设,内嵌在NVIC中,有关寄存器的定义和部分库函数都在core_cm4.h头文件中实...

2019-12-24 12:49:02 100

原创 STM32学习笔记(六)---EXTI

STM32学习笔记(六)—EXTI文章目录STM32学习笔记(六)---EXTI一、EXTI简介二、EXTI框图1. 产生中断2. 产生事件三、外部中断/事件线映射四、编程流程EXTI: 外部中断/事件控制器一、EXTI简介外部中断/事件控制器包含多大23个用于产生事件/中断请求的边沿检测器。每根输入线都可单独进行配置:选择类型(中断/事件)和相应的触发事件(上升沿、下降沿或边沿触发)...

2019-12-24 12:45:05 77

原创 STM32学习笔记(五)---NVIC

STM32学习笔记(五)—NVIC文章目录STM32学习笔记(五)---NVIC一、NVIC简介二、中断优先级优先级定义优先级分组三、中断编程F407在内核水平上搭载了一个异常响应系统,支持为数众多的系统异常和中断,其中系统异常有10个,中断有82个。一、NVIC简介NVIC是嵌套向量中断控制器,控制着整个芯片中断相关的功能,它跟内核紧密耦合,是内核里面的一个外设。在配置中断的时候一般...

2019-12-20 10:33:07 76

原创 STM32学习笔记(四)---RCC

STM32学习笔记(四)—RCC文章目录STM32学习笔记(四)---RCCRCC时钟框图---时钟树系统时钟1.HSE高速外部时钟信号2.锁相环PLL3.系统时钟SYSCLK4.AHB总线时钟HCLK5.APB2总线时钟PCLK26.APB1总线时钟PCLK1其他时钟其他时钟RCC: Reset Clock Control 复位和时钟控制器RCC时钟框图—时钟树系统时钟对应的是图中黄...

2019-12-19 08:58:39 228

原创 STM32学习笔记(三)---启动文件

STM32学习笔记(三)—启动文件文章目录STM32学习笔记(三)---启动文件启动文件简介启动文件中用到的ARM汇编指令启动文件分析1. 栈2. 堆3. 向量表4. 复位程序5.中断服务程序6. 用户堆栈初始化启动文件简介启动文件由汇编编写,是系统上电复位后第一个执行的程序。初始化堆栈指针 SP=_initial_sp初始化PC指针=Reset_Handler初始化中断向量表配置...

2019-12-19 08:54:12 123

原创 stm32 u8g2移植笔记

STM32 u8g2 移植笔记前言当初想写一个单色屏菜单时,曾移植过u8g2到STM32平台(这里用的是keil MDK),不过当时一直有一个问题没有搞懂:为什么u8g2用在flash为32k,ram为2k的arduino uno上都不会报空间不足,却在flash为512k,ram64k的stm32zet6上报错空间不足?这是由编译器导致的,arduino使用的是avr-gcc编译器在编译的时...

2019-12-15 18:40:08 711

STM32F4_ROS.rar

STM32F407移植rosserial 通过USB虚拟串口和ROS系统进行通信,内部包含简单的发布测试例程。

2019-07-31

Stm32f103_超声波模块测试_利用外部中断.rar

stm32驱动HC-SR04超声波模块测距的中断例程,PA4->Trig,PA5->Echo 串口1打印测量距离。

2019-07-29

STM32编码器模式测试例程

STM32编码器模式的测试例程,代码中采用TIM2定时器的编码器模式,在主程序中利用延时函数监测单位时间内的脉冲数,并根据脉冲数计算速度。程序中不包含电机输出控制和PID调速。

2018-11-19

stm32驱动舵机

STM32驱动舵机转动的测试程序,程序中使用定时器1的pwm输出比较模式。

2018-11-14

WS2812驱动程序(SPI+DMA)

STM32通过硬件SPI+DMA方式驱动WS2812灯珠的驱动程序,其中移植了Adafruit_NeoPixel库函数可以实现多种显示效果。main函数中保留了各种样式的测试函数,只需在头文件中配置灯珠个数,将控制引脚接到PA7即可。目前测试过程中未发现明显bug,若有问题欢迎指出!

2018-10-28

MAX6675中文数据手册

MX6675芯片的中文数据手册,其中的重点部分作了高亮标记。

2018-08-16

STM32驱动max6675测温的测试例程

STM32F103 驱动max6675模块测量k型热电偶温度的测试例程。用到的资源有串口1和SPI1

2018-08-16

基于STM32单片机的指纹识别模块的测试代码

基于深圳十指科技公司出品的TFS-M64指纹识别模块的STM32测试代码,为了测试方便直接从原子例程中修改的。通过串口2与指纹模块通信,程序中封装了指纹模块的操作函数库。main.c文件中包含了许多之前测试的代码。

2018-08-15

ROS底盘制作过程中的一些疑问

发表于 2019-06-24 最后回复 2019-07-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除