- 博客(99)
- 资源 (9)
- 收藏
- 关注
原创 【第二篇】stm32f4采用6步法控制直流无刷电机
第一篇中用最通俗易懂的方式讲解了bldc电机的原理,以及最基本的6步控制原理,本篇将介绍怎么使用stm32单片机来实现6步法控制直流无刷电机。
2024-11-20 17:11:30
1487
1
原创 【第一篇】直流无刷电机BLDC原理
直流无刷电机现在的应用范围很广泛。各种机器人、扫地机、无人机中均有使用。关于无刷电机的工作原理,查了各种资料,看的云里雾里,什么矢量控制,无感,有感,6步换向,等太理论了很难直观了解具体工作原理。其实无刷电机和有刷电机原理是一样的都是利用磁铁的的原理,通过下面的动画就可以很直观了解到其整个工作过程。很直观简洁。
2024-11-20 10:23:46
1549
原创 AltiumDesignerSummer9Build9.4.0.20159 下载地址
官方下载地址http://downloads.altium.com/altiumdesigner/AltiumDesignerSummer9Build9.4.0.20159.zip。
2024-01-16 17:17:39
1708
1
原创 freertos优化cli终端组件
在使用freertos的过程中,逐渐发现其自带的cli终端组件真是一个好好东西,非常方便调试。直接可以使用串口终端助手与mcu进行交互。类似于linux中的终端,可以执行一些命令,看系统堆栈状态,任务状态等等。同时也发现一个用起来不太友好的地方,定义命令的回调函数过于复杂,与cli中断勾连太多,不够简洁易懂。
2023-07-12 11:50:11
953
原创 git checkout出现error: invalid path
解决办法:关闭git对于NTFS文件系统的保护,随后再次git checkout即可。分析是因为原代码是Linux环境下编写的,导致文件系统出的锅。
2023-06-28 15:08:11
1172
原创 daplink烧录器
使用daplink后,发现只能使用pyocd的终端命令,没有界面程序。对于非开发者很不友好。于是有想写一个界面的想法。
2023-06-16 20:22:03
2028
3
原创 ses价签墨水屏折腾-01
2.66寸价签型号:2.6 BWR GL340主控型号:cc2510屏幕型号:SE2266FS0924.2寸价签型号:2.6 BWR CU140主控型号:AX8052F143屏幕型号:SE2417FS051两块屏幕用的都是24pin FPC 0.5mm的接口。通过搜索找到了屏幕的官网在官网没有找相同的型号,但有类似的型号,看封装是一样的。引脚定义应该也一样。
2023-06-02 15:44:16
5272
1
原创 自动以版本号命名keil生成的bin文件
在做项目中一直遇到一个小问题。一直也没管,最近花了点时间处理了,效果还不错。问题是这样的:每次编译后的生成的bin文件需要给客户,烧录到设备里进行更新。每次生成的bin文件都是固定的文件名,发给客户前,需要人为将bin文件改为vx.x.x.bin再发送。这一步需要人工命名,虽然花不了几分钟,但是还是觉得体验不太好,因为如果一次编译的版本多的话,人容易命名出现纰漏。所以如果能生成bin文件后,自动进行重命名,那可靠性比人工高多了。
2023-03-28 16:42:26
3087
2
原创 windows配置c语言编译系统-wingw gcc cmake
笔者在做嵌入式mcu编程的时候,有时候想要验证一下部分代码的功能,需要先编译成bin文件,然后烧录到mcu内执行。每次编译烧录运行耗时较久。于是想到是不是可以在电脑上配置一个c的编译环境,来验证一些与硬件不相干的代码。验证好后,直接放到keil编译,烧录到mcu。这样直接在电脑上验证可以节省不少时间,提高效率。由于只是简单的验证部分代码,又不是要开发c工程,能搞一个轻量化的编译环境是比较好的。所以windows上实用率较高的vs studio,Code::Blocks这些集成编译环境首先就pass掉了。
2023-02-17 19:48:14
1961
原创 win10 git 标准化commit工具commitizen安装教程
https://nodejs.org/en/ 下载最新版本安装完成后,修改环境变量默认 nodejs是有的,需要自己添加npm路径。
2022-12-22 16:41:28
1209
原创 hc32和stm32 can波特率设置
笔者在调试一款新的mcu的can通信时候,最麻烦的是波特率设置。由于没有弄明白其计算原理,经常出错,且不同的波特率有不同的采样点的要求。浪费了不少时间。这次一次搞明白can波特率的计算公式。
2022-12-15 19:46:57
2851
原创 使用pyocd 报没有找libusb问题
如果直接运行,还是会报no libusb library was found。还需要将libusb.dll设置为系统可查找的到的路径。在Windows path里添加libusb.dll路径。添加环境变量,右键我的电脑,属性,高级系统设置,环境变量。再次运行pyocd命令,就不会报找不到libusb库了。直接把libusb.dll拷贝到python目录。首使用pip安装libusb。双击path进行添加。
2022-12-13 11:03:45
1043
原创 pyocd手动安装pack包
进入pyock pack manager目录c盘C:\Users\Administrator\AppData\Local\cmsis-pack-manager\cmsis-pack-manager。新建Keil目录,在Keli目录新建STM32F4XX_DFP目录,在STM32F4XX_DFP目录下放入上面下载的.pack文件,在使用pyocd的时候发现没有stm32f407,于是使用pyocd pack命令安装。然后在中断中输入pyocd pack -s 便可看到安装的stm32f4包。
2022-11-14 12:54:46
4341
原创 新版daplink keil5识别不了
下载了官方的daplink固件进行编译,完成后,发现keil5无法识别到cmsis-dap,经过查找发现是兼容性问题。
2022-11-01 16:34:30
5262
8
原创 hc32生成app分区bin文件实际生成了bin文件夹的问题
最新在项目中使用到了hc32f4a0单片机,会使用到iap升级功能,在编译app代码时将中断向量表偏移到0x40000后,发现没有生成bin文件,而是生产了.bin文件夹,如下图:其内容如下图:正常应该生成firmware.bin文件。
2022-10-28 17:15:55
435
1
原创 keil5 compiler6 -o1读取内部flash硬件错误的问题
最近在做gd32E230c8t6 BootLoader的时候,发现当打开编译优化-o1的时候,代码运行不正常。代码会在读取内部flash内存时出现问题,进入了hardfault。但是改为-o0后,运行就正常了。非常诡异,后面经过反复测试逐步摸清楚了问题的原因。先看问题的代码其中PAGE_SIZE=1024.这段代码的意思很简单,就是将FLASH_SAVE_ADDR_APP后的1K字节读取到temp数组中。flash_read函数内容如下。
2022-09-15 20:35:07
1345
1
原创 stm32检测串口空闲的原理
在在使用串口的时候,串口dma+空闲中断,用起来非常爽,但是一直不知道,stm32硬件是如何判断一帧数据时候接受完了。这次一次分析下。
2022-08-10 19:48:27
3181
1
原创 stlink故障修复
一直用的是国产版stlink,但是最近手头手头上的两个stlink在下载的时候出故障了,无法识别。上淘宝一搜发现涨价了,记得以前是20左右,现在都要40快一个。于是想着能不能进行修复。百度搜了一下,发现确实有大神开发出了固件。可以重新把stlink里面的固件重新刷一下。stlink里面实际上是一块stm32单片机。手头上的用stlink,如上图的里面是一块stmf101c8t6,但网上找到的固件都是stm32f103c8tc6的,有的博客说这两个是通用的,但是经过我的测试发现,103的stlink固件在10
2022-06-28 17:45:03
7178
19
原创 3线spi屏幕驱动方式
最近研究了一下3线spi屏幕的驱动方式。屏幕的驱动芯片为ILI9488,相比于4线,3线spi屏幕没有用到DC写命令/写数据控制线。DC=0表示写命令,DC=1表示写数据。3线spi就是将DC命令放到了每个8位数据的最高位。这么说还是有些枯燥,看下具体的例子。假如采用spi发送0x55,一般采用的MSB,高位在前的方式。那么SDA(MOSI)数据线上是这样的:如果要假如dc命令,则0x55要分为两个字节进行发送,假设DC=1,则SDA(MOSI)数据如下:相当于要将0x55转换为:0x80AA。同时要
2022-06-23 17:27:41
7562
5
原创 ESP32-添加多目录的自定义组件
在esp32开发中,一般用的是vscode。没有像keil mdk等集成开发环境,这就对不熟悉cmake的人士不太友好。笔者也是参阅了cmake官方文档以及esp32开发手册,找到一个非常有效的以及简单的CmakeList.txt的编写方式。esp官方比较推荐的目录格式是有两个文件夹,一个是main文件夹,一个是components文件夹,这两个文件夹的名称不建议更改,这两个是esp32开发环境默认的main模块和components模块。esp32采用的cmake编译工具。当添加了新的文件后需要自己编写
2022-06-23 16:57:15
8563
4
原创 ESP32实验-自建web服务器配网02
上一篇提到了配网的简单方式,采用的json格式传递wifi账户和密码。这种方式优势是可以在esp32端直接用cjson库解析出json数据。但是不好的地方在于,html网页会复杂一点,需要将输入框中的数据转换成为json格式再发送。发送方式为post请求。那么有没有办法直接解析post默认格式数据呢。这一点本文将进行探讨。另外一点,上一篇wifi从ap模式切换到station模式采用的是延时。这种方式也是不是很合理,这里进行了优化。这里对配网的整个流程进行梳理。上电->wifi初始化为ap模式->开启htt
2022-06-23 15:39:29
5288
7
原创 LVGL中文字体制作
lvgl原生不支持中文显示,但是lvgl官方提供了生成中文字体的工具。使用起来比较方便。LVGL支持的编码是UTF-8,而我们常用中文字体是GB2312。这就需要转换,大致的原理是,将现有字体中我们需要用的中文文字,提取出来,转换成为UTF-8格式的字体。所以前期我们需要准备一款字体。具体的字体需要是TTF或者WOFF格式字体,可以在利用电脑中的字体,位于C:\Windows\Fonts\中。在这里我准备的是 simhei.tft字体字体转换工具为在线工具。https://lvgl.io/tools/fon
2022-06-08 11:49:16
5873
原创 GD32 can发送报no mailbox 故障
1、问题描述在使用GD32can通信时,发现如果can线断开了,再把can线连上,用can分析仪监测不到总线数据,调试后发现can发送没有成功,通过串口打印出错误,显示是没有邮箱。2、问题解决这个问题的原因是没有没有使能重新上线自动连接的功能。can_parameter.auto_bus_off_recovery = ENABLE;打开这个功能后,就正常。另外,要使用can1,必须要初始化can0才行。GD307的can初始化代码如下:void init_can0(void){
2022-05-30 15:45:27
5184
6
原创 单片机通信数据延迟问题排查
1、问题说明笔者在最近的项目中,发现系统的响应延迟较高。经过排查,排除了单片机运行卡死的问题。2、原因分析具体排查过程这里就不细致说明了,直接给出排查后原因。任务执行周期规划不合理,导致freertos队列发送接收到的命令有延迟。为了便于理解,这里就不展示代码,直接展示一段简单的示例代码会更清晰。先看下代码的框图上图较为清晰的说明了两个任务的功能及执行周期。下面看下具体实现的代码void task1(void *pvParameters){ uint8_t data = 1; uint
2022-05-30 13:00:40
2171
原创 GD32F4串口dma接收问题解决
1、问题描述在使用gd32f450时,由于之前没有使用过,所以不太熟悉。板子拿到首先要调试下串口收发,串口接收采用dma。但是遇到这样的问题,第一次接收正常,但是后面就接收不到了。经过调试,串口空闲中断是可以进入。但是得到的数据长度全部是0void USART1_IRQHandler( void ){portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE; uint16_t usart1_rx_len = 0; uint8_t data = 0; i
2022-05-25 15:24:23
8281
8
原创 GD32测量pwm波频率以及占空比
1、需求最近做的一个项目,其中有一个传感器输出是pwm波形,频率代表速度,频率越高速度越快。不同的占空比代表不同的故障类型。占空比10%~90%,频率范围20hz ~1khz。基于以上的需求,单片机要实现两个功能:1、测量频率2、测量占空比这怎么玩呢?从没搞过啊。2、需求分析经过查找资料以及参考正点原子的教程,发现单片机的定时器的输入捕获功能能够实现该功能。2.1分析如上图所示,测量占空比和测量频率实际上就是测量波形的长度。对于占空比,就是测量T2与T1时刻的差值对于频率,就是测量T
2022-05-20 20:16:27
7692
7
原创 LVGL学习-对齐
1、alginlvgl中,对象之间的对齐大的分为两种,一种内部对齐,一种外部对齐。各种对齐方式如下图。2.对齐函数2.1 lv_obj_align()该函为与父对象内部对齐。 lv_obj_t *parent = lv_obj_create(lv_scr_act()); lv_obj_set_size(parent,100,100); lv_obj_set_style_bg_color(parent,lv_palette_main(LV_PALETTE_BLUE),0);
2022-05-12 18:47:49
15285
4
原创 stm32移植lvgl
1、lvgl简介lvgl是一款全部用c语言实现的ui图形库,对硬件的要求比较低,可以较为流畅的运行在单片机上。并且完全开源,对按钮,触摸,编码器旋钮等支持的非常到位。且开发的界面较为美观,符合时下主流的审美。目前最新版本已经更新到了8.3版本,官网地址为https://lvgl.io/。本次移植使用的是8.1版本。下载链接为https://github.com/lvgl/lvgl/releases/tag/v8.1.02、lvgl源码下载完成后接下,源码根目录如下移植需要用的目录是src和exa
2022-05-11 14:00:54
7971
2
原创 stm32f407 RTC不更新问题排查
1、问题在做stm32f407rtc实验时,代码是用cubemx生成的,通过串口打印出时间值,1s打印一次。但是结果与料想中的不一致。发现打印出来的值一直不更新。按下复位键,后时间会更新一次。一开始一直是51s,按下复位键,发现时间更新了,再按下复位键,时间再次更新。后来直接在线debug,运行后,一开始时间也是不会更新的,但是后来将hrtc结构体放到观察窗口,并点击了instance成员后,奇迹出现了,发现时间能够正常更新了。这就非常奇怪了,甚至怀疑了单片机出问题了,结果换了一块板子,还是同
2022-05-06 15:30:55
2954
8
原创 freertos学习03-cli终端移植及调试
1、前言接触过Linux的都知道,最好用的一个工具就是终端,终端可以输入命令运行代码,查看信息,非常便捷。而搞单片机开发的好像基本没怎么接触过类似的工具,开发单片机用的最多的就是使用串口打印工具进行调试printf,但这个缺陷是,只能做显示,不能进行交互,如果需要显示新的信息,需要改代码然后编译,烧写,运行。这样操作难度比较大,比如在客户现场售后维护同时要进行调试,这个操作基本不可行,一般售后人员没有编写代码的能力或者权限。为了方便代码调试以及bug排除。最好是能有一个类似linux上的串口中断,我可以
2022-04-25 18:55:47
6547
9
原创 freertos学习02-队列 stream buffer message buffer
1、freertos数据传递简介在freertos中,各个模块都是独立的任务,那么任务之间怎么进行大量的数据通信呢?在V10版本给出了三种方法。队列queue,发送固定长度的数据串stream buffer,为新增的特性,发送不定长度的数据串message buffer,为新增的特性,发送不定长度的数据串,同时带有发送长度信息以上三者,都可以用于任务-任务,任务-中断,都遵循FIFO先进先出原则,数据传递的方式为拷贝,像ucos中数据传递采用的传输指针,拷贝的方式效率有所降低,而好处也很明显,
2022-04-22 17:52:08
3177
2
原创 stm32以及freertos 堆栈解析
以前在mcu编程的时候没有太注意堆栈的情况,只知道需要将堆栈设置的大一点。现在逐步使用freertos,在freertos中也有关于堆栈的设置,freertos的堆栈和启动文件中的堆栈关系是什么?为了以后使用的无误,本次一次性把这些弄清楚。1、定义堆栈是一个特定的存储区或者寄存器。一般在内存总开辟一块区域作为堆栈,叫做软件堆栈;用寄存器构成的堆栈,叫硬件堆栈。大多数情况下,我们使用的都是软件堆栈。在stm或者gd32的启动文件中的堆栈就是软件堆栈。堆栈中数据的存储,都要遵循先进后出的原则,可以类
2022-04-21 16:27:47
8440
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人