![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
嵌入式开发
文章平均质量分 68
老李的森林
老李,自由职业,主要工作是方案设计,定制开发,包括机械设计(UG),电路设计(Altium),嵌入式开发(STM32,MSP430,软硬件开发),电脑端软件开发(Python,Delphi)。主要工作方向是3D打印机设计,自动化设备的开发,并联机器人的设计开发。
展开
-
嵌入式开发--获取STM32产品系列的信息
有时候我们需要知道当前MCU是STM32的哪一个系列,这当然可以从外部丝印看出来,但是运行在内部的软件如何知道呢?ST为我们提供了一个接口,F1和G4系列地址统一为:0xE004 2000,需要以32位方式读取。H7系列的地址是0x10006450对于F1系列,该说明如下:对于G4系列,说明如下:例如我读取的内容如下图,对应的就是再去查看后面蓝色标识的表格如下:是属于第2类设备,容量是128KB但如果读出来的是第3类设备呢,有那么多型号。原创 2024-03-21 15:52:33 · 440 阅读 · 0 评论 -
嵌入式开发--STM32用DMA+IDLE中断方式串口接收不定长数据
IDLE顾名思义,就是空闲的意思,即当监测到串口空闲超过1个串口的数据帧时,会使状态寄存器(SR或ISR)的IDLE位置位,如果此时控制寄存器(CR或CR1)的IDLEIE为1,则会触发IDLE中断。DMA搬运数据,则是一边接收数据,一边将串口接收到的数据搬运到内存中,这个过程不需要MCU参与,等到IDLE中断到来的时候,直接去内存中取数据即可。DMA中断在CubeMX中是默认开启的,可以手动将其关闭,等IDLE中断到来的时候,直接操作读取数据即可。原创 2023-07-17 08:25:37 · 1623 阅读 · 0 评论 -
嵌入式开发--无刷电机学习4--SVPWM
这张图是基于α和β坐标系,也就是定子磁场坐标系,图中的Uout就是定子磁场的空间矢量,它的角度表示定子线圈产生磁场的方向,长度表示磁场的强度,以电机匀速旋转为例,FOC控制的目标就是让这个矢量的长度保持不变,角度匀速变化。图上以60度为间隔,划分了6个区,其意义类似于6步换向,也就是在不同的区域,相应的开启或关闭相应的驱动桥的上下臂,以及上下臂的导通时间,来实现的。原创 2023-05-02 17:32:38 · 1164 阅读 · 0 评论 -
嵌入式开发--无刷电机学习3--帕克变换
前面说到克拉克变换的物理意义,是将三相定子线圈产生磁场的过程,等效为2个正交放置的线圈,来产生同样的磁场。通过控制这两个正交线圈即可等效控制三相定子线圈。还有一个问题,定子线圈产生的磁场,如果与转子位置不匹配就成了开环控制了,显然我们需要与转子的位置对应起来控制,这个过程也叫闭环控制。也就是不断的读取转子的位置,并根据这个位置,实时的给出当前所需要驱动磁场方向和强度。定子磁场坐标是一定的,也就是我们之前说到的定子坐标系,和Ia-Iβ坐标系。而转子的磁场是一直在旋转,这个叫转子坐标系。原创 2023-05-02 07:47:27 · 2307 阅读 · 0 评论 -
嵌入式开发--STM32片上外设--独立看门狗IWDG
嵌入式开发–STM32片上外设–独立看门狗IWDG。说白话就是单片机可能因为干扰造成工作异常,或软件编写问题错误造成程序跑飞,比如本来应该在程序区取指令,结果由于指针异常,跑到数据区去取指令。或者反过来。可想而知程序执行会有意料不到的后果。于是我们设置一个硬件机制,必须在固定的时间间隔内,对某种硬件电路发送信号,如果超过这个时间间隔,该硬件电路会将单片机复位,使得程序重新执行。如此增加了系统的可靠性。这个硬件机制就叫看门狗。发送信号叫喂狗。一旦超时狗会叫,单片机会复位。原创 2023-04-09 16:17:26 · 872 阅读 · 0 评论 -
嵌入式开发--CAN总线与高速光耦6N137
CAN总线应用时,有时候需要加光耦隔离电路,以免在雷击或遇到高压干扰时,保护设备安全。常用的有光耦隔离和专用芯片隔离。本文介绍使用高速光耦6N137的光耦隔离方案。6N137是10MBPS的高速光耦,而CAN总线的最高速度仅为1MBPS,用在此处绰绰有余。6N137等效电路如下:1,4脚空闲,2,3脚是输入侧,接发光二极管5脚接地6脚输出7脚为使能端8脚接电源。原创 2023-03-21 16:11:39 · 4157 阅读 · 22 评论 -
嵌入式开发--STM32H750VBT6开发中,新版本CubeMX的时钟问题,不能设置到最高速度480MHZ
之前开发的项目,开发环境是CubeMX6.6.1,H7系列的支持包版本是1.10.0。跑得没问题,最近需要对项目做修改,同时我的CubeMX也已经升级到最新的6.7.0,H7系列支持包版本升级到最新的1.11.0。在CubeMX中做了一些修改以后,发现时钟不对了,无法将主时钟频率设置为480M,软件提示D1CPRE时钟要小于200M,如下图:如果将上图箭头处的D1CPRE改为240M,则会出现下图的报错,软件提示DIVP1的时钟不能大于300MHZ,原创 2023-03-01 16:24:41 · 3738 阅读 · 13 评论 -
嵌入式开发--PID控制
讲解PID的文章书籍很多,本文就不详细讲了,只讲一下我在学习过程中不容易理解的一些问题点,以供大家参考。比如很多书籍对于PID,只讲了计算,但是最后计算出来的值如何应用,则完全不讲,当时我是一头雾水,后来搞明白以后又觉得还是很简单的,但如果书籍里面能提一下,那不是让人学习起来容易很多么。PID就是比例,积分,微分三个单词的首字母缩写,是工程上控制系统中的一个常用控制算法。以下结合我之前做过的一个温度控制的项目来介绍PID。用的是当时保留下来的一些调试图片,供参考。PID有两种控制方式,增量式和位置式,二原创 2022-12-26 09:00:00 · 1699 阅读 · 1 评论 -
嵌入式开发-STM32硬件SPI驱动TFT屏
现在的TFT屏幕已经很便宜了,65536色屏幕,2.8英寸,分辨率320X240的液晶屏才20元,我为了图省事,多配了一个转接板12元,共32元包邮到家,真是香。上面这个是这次用到的2.8寸TFT屏幕(20元),下面的是0.96寸OLED屏(10元),可见尺寸的巨大差别。当然OLED屏的优势是省电,在手持设备上是首选。这个屏幕是SPI接口,最少4线驱动,分别是MOSI数据,CLK时钟,CS片选,DC数据/指令切换,还有2根线可选,是RESET和背光,复位可以用电阻电容上电时拉一下跳变即可,背光可以一直接原创 2022-12-12 09:00:00 · 3842 阅读 · 0 评论 -
嵌入式开发--RS-485通讯的问题
RS-485一般简称485总线,是最常用的工业总线之一,一般采用2线的半双工模式,用差分方式收发信息。最高速度可达10M BPS。单片机使用485总线时,是用UART或USART接口,通过RS-485收发器完成信号的输入和输出。常用的芯片有MAX485,MAX3485,SP3485等等。硬件很简单,RO和DI连接到单片机的UART接口,是数据的收发引脚,RE和DE连通,接到单片机的GPIO,以控制数据流的方向,是输入还是输出。连接到UART2,具体设置如下:这些参数需要根据你的设置要求进行,异步模式原创 2022-12-06 19:59:28 · 2807 阅读 · 0 评论 -
嵌入式开发--STM32硬件SPI驱动74HC595
本篇是硬件SPI口驱动74HC595。原创 2022-12-05 09:00:00 · 4130 阅读 · 3 评论 -
嵌入式开发--Altium技巧:原理图设置和布线前的检查
在工程上点右键,并在弹出的菜单上选择最后一项:Project Options,即项目设置。弹出如下界面,如果操作不当,设置错了,可以点击左下的按键,设置成安装缺省,恢复默认设置。2 Floating net labels 未接入的网络,如下图PB0。可以双击Message窗口中的每一项报告,如第1个,就违背了上面的第4条规则,如下图。这几个都是极其重要的错误,一旦忽略,就会造成打版后的错误。Altium的默认设置,有一些是很不合理的选项,强烈建议大家修改。设置好以后按确定键,以保存。原创 2022-11-29 11:30:05 · 689 阅读 · 0 评论 -
STM32开发时HardFault错误的排查
本篇是一文的扩展。把相关的问题记录一下,给遇到HardFault_Handler问题的朋友做个参考。原创 2022-11-21 14:52:07 · 1883 阅读 · 0 评论 -
C语言保留指定位数的小数
嵌入式开发中,经常会遇到C语言要保留指定位数的小数的问题,在此做个记录,免得每次用到都要折腾一通。原创 2022-11-17 14:52:23 · 13183 阅读 · 0 评论 -
嵌入式开发-STM32硬件I2C驱动OLED屏
坊间流传STM32的硬件I2C很容易死机,所以不能使用硬件I2C,正点原子也在教程中强调了这一点。个人猜想由于Philips拥有专利,而ST为了绕开专利,而将硬件I2C弄得异常复杂(从相关的寄存器数量及设置可见一斑),造成硬件I2C很是难用,也容易出现异常死机。今天我就来挑战一下。尝试使用STM32F103C8T6用硬件I2C的方式来驱动OLED屏。原创 2022-11-07 11:47:42 · 7788 阅读 · 2 评论 -
嵌入式开发--CubeMX使用入门教程
传统的单片机开发时,需要针对片上外设做各种初始化的工作,相当麻烦。CubeMX是ST公司出品的一款图形化代码生成工具,通过图形化界面,可以非常直观的配置好各种片上外设,时钟,中断,DMA等等各种设备的参数,然后CubeMX可以直接生成初始化代码,使得开发人员可以将更多的精力放在核心代码的开发上。生成的代码选择性适配IAR,KEIL,以及ST自家的STM32CubeIDE(免费)原创 2022-10-25 20:10:35 · 17832 阅读 · 2 评论 -
电路设计基础--MOS管驱动直流电机电路,看懂芯片手册
第1页一般是芯片的简要介绍,会说明芯片性能,关键参数,封装,以利于工程师的快速选型。原创 2022-10-15 15:54:24 · 7354 阅读 · 0 评论 -
电路设计基础--三极管驱动直流电机电路
直流电机,即通上直流电,就可以旋转的电动机。由于电机的线圈绕组会频繁的换向,换向碳刷或铜片与线圈接触处会有火花,这种电机工作起来会有较大的电磁干扰,对电源来说,也会带来尖峰毛刺。原创 2022-10-06 14:36:06 · 8178 阅读 · 4 评论 -
电路设计基础--光耦接口电路的设计和参数选取--高速光耦TLP109
光耦常用于电气隔离,以免外部进来的信号中混有高压,大电流等脉冲,烧坏我们自己的电路或芯片。比如422,485,CAN,或室外的可能遇到雷击的各种传感器和线路,与设备连接时,通常都会用到光耦。光耦比较简单,外围电路也不多,最简单的光耦外部电路只有2,3个电阻,但这2,3个电阻的取值却是有讲究的,很多工程师不明所以,随便抄一个电路,虽然大概率也能用,但往往都不能让芯片工作在正确的状态下。虽然只是2个电阻值的选取,但对于电子工程师来说,吃透电路原理是非常重要的,如果参数选择不合适,轻则无法工作,重则工作不可靠。原创 2022-10-05 16:38:18 · 7829 阅读 · 0 评论 -
电容式触摸按键功能的实现
现在有很多设备都实现的触摸功能。相比于原先的按键开关,由于没有机械动作,所以它的寿命更长,轻触即可实现按键的功能。具体的实现方式,是检测一个金属片的对地电容量,当这个电容量突然发生变化时,即可认为有了触摸行为。许多芯片还有自校准功能,可以消除环境变化导致电容量检测偏差。原创 2022-09-30 18:40:05 · 2201 阅读 · 0 评论 -
STM32无硬件随机数发生器时生成随机数的方法
对于有RNG功能的MCU,直接调用相关的函数即可,很简单HAL_RNG_GetRandomNumber 获得随机数。原创 2022-09-13 17:45:46 · 2122 阅读 · 0 评论 -
STM32驱动2位数码管
一般我们用的数码管是8位的,其实就是在一个模块中集成了8个LED,分别显示笔划,如下图电路原理如下,若是将所有LED的N极连接到一起,叫共阴,若是将P连接到一起,叫共阳。我用红字标出了每个笔划对应的定义。2位数码管,就是有2个8段的显示,并把它们集成到了一起,其abcdefg和dp脚都连到了一起,2个公共端分别表示左边和右边的选择。......原创 2022-08-27 19:14:48 · 6679 阅读 · 3 评论 -
6轴并联机器人示教器
6轴并联机器人示教器开发中,先演示一下各个硬件功能模块。示教器用来调试机器人的动作和姿态,并可以记录若干个分组,每个分组存储一组示教数据。机器人支持 8路输入和8路输出信号,以支持输入的传感器以及控制信号,和输出的动作执行器如气缸,电磁阀,继电器等。原创 2022-08-22 11:33:00 · 600 阅读 · 0 评论 -
stm32以中断方式扫描矩阵键盘
普通的按键,都是一个IO口控制一个按键,但是当按键数量变多时,单片机可能没有那么多的IO口来供给按键使用,这时候就需要用到矩阵键盘,比如4。定义一个结构体,有按键触发时,active置1,x,y分别记录行列值,num是最后的键值。4 在Y4中断内,将Y4配置为低电平输出,而X0~3配置为上拉输入,记录下Y值为4。X0到X3这4个IO口配置为低电平输出,无上拉,无下拉,即推挽方式,速度为中。5 逐一检测X0~3的电平,哪一路为低,即对应的为X键值,本例X值为2。最后调用键盘扫描函数,来确认X的键值。.....原创 2022-08-09 17:11:30 · 3945 阅读 · 0 评论 -
stm32 用定时器的编码器模式来检测正反转
编码器常用来检测电机的正反转,也有做成旋钮的形式,用于人机交互界面,二者原理都是一样的,本例以旋钮编码器为演示:AB两相,分别输出方波,编码器正向旋转时,A相比B相超前90度,反相旋转时,A相比B相滞后90度。通过检测二者的相位差,即可得知电机的旋转方向。通过检测脉宽,可以知道电机的转速。stm32系列单片机的定时器提供了编码器模式,可以检测编码器的旋转方向,以及脉冲数。...原创 2022-08-09 14:59:23 · 4609 阅读 · 2 评论 -
嵌入式开发--IO口扩展--74HC595
嵌入式开发–IO口扩展,输出引脚嵌入式开发经常遇到IO口不够的情况,更换引脚更多的单片机是一种选择,但最近两年单片机的价格翻着跟斗的往上涨,替代方便也有,就是通过IO口扩展芯片来实现。本段说明摘自明微电子的说明书:74HC595D 是一种具有8 位锁存、8 位串行输入、 8 位串/并行输出、 串—并移位寄存器和三态输出功能的通用LED 驱动芯片。具有8 位移位寄存器和一个存储器,三态输出功能。 移位寄存器和存储器是分别的时钟。数据在SCK 的上升沿输入,在RCK 的上升沿进入的存储寄存器中去。移位寄存原创 2022-05-21 16:45:21 · 4895 阅读 · 0 评论 -
6轴并联机器人的拖动示教功能
6轴并联机器人的拖动示教功能,人工操作操作一次,机器人重复千万次,省去大量人工重复作业,机器替代人工是未来的趋势,机器人的开发已接近尾声,未来可期。#6轴并联机器人 #6轴机器人 #并联机器人 6轴并联机器人的拖动示教功能,人工操作一 ...原创 2022-05-20 11:06:52 · 852 阅读 · 0 评论 -
Keil MDK 5.36安装及和谐
Keil MDK 5.36安装及和谐官网下载KEIL MDK5 5.36版本安装软件和谐踩坑指南官网下载KEIL MDK5 5.36版本下载地址:https://www.keil.com/demo/eval/arm.htm,输入基本信息即可免费下载最新版本。我是喜欢用比较新的版本,但不会用最新的,怕出问题当了小白鼠。一般来说新版本会改进一些老版本中存在的bug,当然也会放入若干新bug _。主要是新版本会增加一些新的功能。安装软件安装路径默认就好,但是要注意不能有中文,否则即使软件安装成功,原创 2022-05-10 18:11:28 · 16610 阅读 · 8 评论 -
嵌入式开发--Altuim Designer生成的PCB文件过大,及其他日常技巧
Altuim Designer生成的PCB文件过大一般我们画图,不同的设计,生成的文件在几百K到几M之间。但是,如果一个简单的设计,其PCB文件也占用几M甚至几十M,那就不正常了,大概率是包含了中文字体。如果PCB上的印刷字体,包含了中文,那么在默认情况下是会将整个中文字库包含进PCB文件的,解决方法也很简单,如下图,不要勾选这个选项就行了。为了使中文在PCB板厂也能正常丝印出来,建议在设计的时候不要选择不常用的中文字体,用最平常的黑体就可以了。有些朋友可能不知道如何在PCB上显示中文,看到的都原创 2022-05-04 15:09:20 · 1892 阅读 · 2 评论 -
6轴并联机器人开发----系列
6轴并联机器人开发6轴并联机器人简介机械设计电路设计单片机控制软件电脑端的控制界面这是2021年的工作展望,只是一个工作期望,具体实现会有很多因素会延期,由于我的工作是不定期的承接项目开发,所以有新项目到来,就干活挣钱,交完活了才能做自己计划的事情。所以这个项目极有可能延期。本帖先占个楼,其实相关的工作已经做了一些了,春节期间会大概整理一下。后续不定时更新6轴并联机器人简介机械设计电路设计单片机控制软件电脑端的控制界面...原创 2021-02-11 10:59:34 · 2201 阅读 · 4 评论 -
STM32配置FDCAN通讯
STM32配置FDCAN通讯由于总线上有设备不支持FDCAN,为了保持兼容性,将本机FDCAN配置为传统CAN运行。CubeMX配置开启SW调试接口开启FDCAN2开启外部时钟外部晶振为12M,主频480M,FDCAN时钟来自PLL1QFDCAN2参数设置,参数设置的说明,在代码中有注释,在此强调2点:1 配置为传统CAN模式时要关闭自动重传,原子哥建议,不知为何,有待测试,CAN标准是支持自动重传的。2 FDCAN支持仲裁段与数据段波特率不同,而传统模式二者相同,所以若配置为传统原创 2022-03-30 10:52:14 · 15274 阅读 · 29 评论 -
电脑不识别STM32的USB虚拟串口
电脑不识别STM32的USB虚拟串口现象板子和电脑联调的时候发现,USB线插入板子以后电脑不识别虚拟串口,通过禁用设备再启用,可以正常工作。也可以按一下复位键才能识别。以前似乎没有这个问题,但记不清具体情况了。电路D+通过1.5K电阻上拉, 调试时整个板子通过与电脑连接的USB口供电, 即插上USB线才开始供电。查找由于通过禁用,启用能正常工作,于是有了上一篇文章python–禁用、启用串口设备。后来发现,如上操作之后,有时候仍然不能正常工作,表现为设备管理器中该设备为未识别的设备,于是判原创 2022-01-28 10:31:33 · 18837 阅读 · 0 评论 -
python--串口通信
Python之串口通信串口通信是嵌入式工程师的必备技能,如果能自己写一个简单的上位机的话,肯定会加分不少。本系列是把相关的工作做个记录,毕竟Python不是经常用,老是忘记很多东西。用的时候总是重头再学一遍太麻烦了。毕竟3个月以后,自己写的程序也如同天书一般。开发环境:Python版本是最新的3.10.1,编译和调试用的是PyCharm2021.4社区版,需要用到的库:串口通信库pyserial,命令行:pip3 install pyserial回车即可安装。串口设备:自己的STM32板子各原创 2022-01-15 11:52:26 · 27443 阅读 · 1 评论 -
STM32硬件CRC的使用
STM32硬件CRC的使用STM32硬件的CRC不占用MCU的计算资源,和软件查表计算消耗的存储空间。但其结果与平常使用的CRC不一样,导致很多人还是在用软件计算CRC。其实结果的差别,只是由于计算方式导致的,调整计算方式以后也可以输出普通计算的结果。异同与普通计算方式相同,以CRC32举例,其默认多项式也是X32 + X26 + X23 + X22 + X16 + X12 + X11 + X10 +X8 + X7 + X5 + X4 + X2+ X +1,但也可以自定义。计算的初值不同:STM原创 2022-01-07 16:12:31 · 12377 阅读 · 12 评论 -
STM32串口通讯--利用IDLE空闲中断来接收不定长数据
回顾之前有一篇文章讲过用定时器超时的方式接收不定长数据 定时器超时的方式,串口接收不定长数据 ,但需要占用一个定时器资源,本文采用了另一种方式,即通过IDLE中断的方式来接收,更简单,也更省资源。原理IDLE顾名思义,就是空闲的意思,即当监测到串口空闲超过1个数据帧时,会使状态寄存器(SR或ISR)的IDLE位置位,如果此时控制寄存器(CR或CR1)的IDLEIE为1,则会触发IDLE中断。知道原理了,就好操作了。CubeMX常规操作1 启动usart1,并开启中断,其他默认2 开原创 2022-01-07 11:04:13 · 7078 阅读 · 2 评论 -
6轴并联机器人开发--进展
到年底了,终于有时间来进行我的并联机器人项目,目前在电脑端把位置算法解决了,这是用python写的一个模拟程序。示意图如下这是初始位置:以三轴方式运行,即没有姿态控制时,上平台和下平台是平行的,每2个一组的主动臂也是平行的,其末端是在同一高度,如下:当加入姿态控制即下平台绕xyz轴均可旋转一定角度时,每2个一组的主动臂的运行不再平行,其末端(也就是主动臂的偏转角)显然不在同一高度,上下平台也不再平行,如下:机械部分,UG画的实物,部分结构件用我自己做的3D打印机打印完成电路板,用原创 2021-12-26 17:24:24 · 887 阅读 · 2 评论 -
STM32G0系列ADC多通道采集时使用DMA传输数据
STM32G0系列ADC多通道采集时使用DMA传输数据使用CubeMX配置会非常方便,本次调试用的版本是6.3和最新的6.4。但CubeMX生成的代码有时会有Bug,特别是像G0这类较新的MCU,这次就把我遇到的问题说一下使用内部时钟,开启SWD等使用内部时钟,并设置为64MHz频率,开启SWD调试,这些都是常规操作,就不多说了1 开启ADC并配置使用了5和10两个ADC通道,分别对应开启和设置2 开启DMA并配置开启DMA的ADC1传输通道,模式为Normal,这样当一次传输完成时会停原创 2021-12-01 11:10:50 · 4134 阅读 · 4 评论 -
IO口软件模拟串口
嵌入式工程师经常会遇到系统资源不够的情况,比如我就遇到了串口不够,但IO引脚和定时器还富余,这时就可以通过模拟方式来扩展出一个串口。这个方法适用于所有嵌入式系统,但是要注意,对于速度不要设置得太高,尽量不要高于9600。否则,当串口所用到的资源优先级不够高,而系统又很繁忙的时候,容易丢失数据或出错。软件IIC是同样的道理,用软件模拟相关时序,但是IIC对时序要求不高,相对容易串口时序先说一下串口的时序,用得最多的就是9600,8,N,1,解释一下:起始位1,在配置描述中中省略,低电平。9600是原创 2021-05-25 22:57:15 · 7603 阅读 · 0 评论 -
比较器没有输出,不能输出高电平
比较器没有输出,不能输出高电平以常用的比较器LM339为例,它的输出端一直是低电平,无论输入的电平怎样变化,输出始终是低电平,怎么回事呢?我们来看一下它的文档,下图是其内部电路原理图。可以看到OUT脚是集电极开路输出,也就是常说的OC输出,内部没有上拉电阻。所以,当我们的电路外围没有设计上拉电阻的时候,OUT脚始终会是低电平。下图是厂家给出的参考设计:可见除了有一个上拉电阻外,还有一个对地的负载电容,其容量是15pF。选择合适的上拉电阻阻值,使流过的电流为1uA~4mA,一般选10K就可以了。原创 2021-04-09 22:04:34 · 2444 阅读 · 0 评论 -
大功率直流无刷电机驱动板功能演示
大功率直流无刷电机驱动板功能演示直流无刷电机驱动板演示,正反转,调速,50V,10A,最大可驱动500W电机 无刷电机驱动演示原创 2021-04-08 11:13:46 · 640 阅读 · 0 评论