- 博客(80)
- 资源 (7)
- 收藏
- 关注
原创 linux i2c总线分析使用设备树
linux i2c总线分析使用设备树i2c总线简要说明I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。分别为时钟线SCL和数据线SDA,这里不重点分析i2c的物理特性,我们主要是分析linux下的i2c的软件框架,在MCU用过i2c的读者应该知道,i2c在MCU里面属于一个外设控制器,用户设置好时钟,从机地址,和数据搬运到读写寄存器外设控制器就可以把数据在i2c总线上发送出去。linux下i2c的总线模型linux是一个支
2020-11-25 16:01:50 2329 4
原创 linux spi总线分析使用设备树
linux使用设备树的SPI总线分析linux下SPI的总线模型linux下spi总线和platform总线类似,platform分为platform device和platform driver,spi总线分为spi_device和spi_driver。在一个Soc芯片上有多个spi的控制器spi0、spi1等等,例如我们把spi0控制器称为一个spi_master,每个spi控制器下面可以挂载多个设备,比如有spi norflash device,spi lcd device等,每个设备的片选不
2020-11-23 20:18:24 3416
原创 升压电路的作用
然后使用10.09乘上1.2 = 12V左右,所以我们的升压的电路输出的电压就为12V。升压电路能做什么呢?在充电的时候充电器的电压假如是12V的,但是你的电池的电压是20V的,那么用12V的电压充电20V肯定是无法充电的,那么就需要用到升压电路了,比如将充电器的12V经过电压升压到20V之后就可以给电池充电了。如下图所示为一个升压电路,使用的升压芯片为FP5207,使用起来也非常的简单。如下图的红色圈出的所示,通过修改R11和R12的电阻的比值就可以改变升压的电压的大小。
2024-11-01 16:54:42 124
原创 esp8266教程:手把手搭建RTOS SDK开发环境
ESP8266_RTOS_SDK只支持在类linux的环境开发,所以在Windows上我们使用mingw32在Windows上搭建这个类似linux的开发环境。mingw32文件包安装完成后如下图所示,里面包含的文件夹和我们常用的linux环境非常的相似,如果你有linux的基础,那么你将使用这个开发环境将变得十分顺手。下面将列出一些文件的作用:mingw32.exe:运行在Windows上的linux命令行终端,通过双击打开就可以得到一个linux的环境,可以使用linux的命令进行操作。
2024-07-24 17:16:48 1793
原创 STM32 产生Hard Fault 调试方法
当STM32 产生Hard Fault的时候可以打印出一些重要的寄存器信息,然后定位代码出错的地方。
2024-07-19 14:14:51 559
原创 STM32 IAP 需要关注的一些事
在编译的时候一般有一个.ld文件去指导,代码是如何分布在固件中,包括堆栈的指定,比如STM32在工程中就有这个文件STM32F100RB_FLASH.ld,用来配置代码编译生成的固件如何分布在那个地址。2、升级的时候涉及到两个程序,一个是bootloader,一个是user程序,这两个程序的功能分别的什么作用的?用于芯片启动的时候还没有跑到main函数之前的初始化作用,指定中断函数的地址。3、编译的固件是怎么分布的?1、首先要知道STM32的程序是如何分布在FLASH中的。
2024-07-17 17:42:56 374
原创 一个用AI生成的链表结构。
尝试使用AI生成一段链表代码,放入编译器后直接编译就可以通过,稍微修改就可以用在实际的项目当中,比自己敲代码来的方便多了,AI好好使用是能提升很大的工作效率的。但是首先需要你知道你想要的是什么,如果不知道你想要的,你也无法让AI帮你做事情。一个用AI生成的链表代码。
2024-07-12 16:41:38 168
原创 linux BT调试记录
因为SOC和BT的通讯使用的是UART进行通讯,出现timeout可能性就是硬件上无法通讯成功,所以我们使用示波器抓了波形,发现SOC Tx的波形只能拉0.5V到GND,无法全部把1.8V拉到GND,检查发现是SOC的串口的Tx接到BT模组的Tx(备注:BT模组的Tx也是输出模式,所以无法拉到GND的,只有对方接收是输入才能拉到GND),所以是设计的时候出现了错误,将Tx和Rx调换过来,BT调试OK。在调试05这个板子的W1模块的BT的时候,使用原厂的SDK调试发现BT无法调试成功。
2024-04-07 14:30:06 446
原创 Linux在应用层上使用I2C
通常情况下i2c读写一般是在kernel中使用,但是在应用层上一样可以使用。在应用上可以通过读写/dev/i2c-x这个节点从而控制i2c接口进行读写数据。通常一个SOC有多个I2C控制器,假设有这个SOC有3个控制器,我们会在/dev目录下看到i2c-0、i2c-1、i2c-2,计数从0开始。
2024-01-08 19:00:20 1275
原创 嵌入式开发专业名词解释
IED就是我们编写代码的工具。有些工具还能提供编译、烧写、生成可执行程序功能。比如keil就是一个IDE工具,开发安装程序的Android studio也称为IDE工具。由此可知IDE工具就是一系列集成开发、编译、生成可执行程序的工具集合的工具集。在不用的领域使用不同的IDE工具。
2023-08-13 14:42:32 492
原创 电子信息工程专业如何安排学习?
在众多的工科院校中一定有一个专业叫电子工程信息工程专业,这个专业一般是开设在电信学院下面的。那么电子信息工程专业的学生主要是学习那些知识呢?电子信息工程专业属于工科专业,所以决定了这个专业主要是应用为主,就是不会涉及到太多的基础研究,这个是和理科专业有很大的区别的。大一的时候和所有的专业一样都有公共课和专业课。公共课就是数学、英语、马克思这些,这些基本所工科所有的专业都会上的课。
2023-08-05 22:55:25 1646
原创 嵌入式软件工程师和嵌入式硬件工程师的区别
由此嵌入式工程师就分为两个分支,嵌入式软件工程师和嵌入式硬件工程师。嵌入式软件工程师负责代码的编写。嵌入式硬件工程师负责硬件的设计。两种工程师所需要掌握的知识是不同的。
2023-08-05 21:48:52 728
原创 你能在linux系统找到cd指令么?
cd不是一个应用程序而是Linux内建的命令,而sudo仅仅只对应用程序起作用。所以,sudo cd containers会报sudo: cd:找不到命令。sudo xxx只意味着以root权限运行xxx程序。
2023-02-09 09:32:30 553 1
原创 什么是堆栈?堆栈用来干什么的?
在程序运行当中,每一个线程都有自己的栈空间,栈是用来干什么用的呢?还记得我们C语言学习的时候函数的局部变量么?栈空间就是用来保存局部变量的。所以我们就回答了第一个问题,栈有什么用,栈就是用来保存函数的局部变量的。
2023-01-01 23:21:43 2144
原创 samba用户管理
假设linux系统中有多个用户,比如zero1、zero2,每个人都有一个/home/zero1这个目录,那怎么让每个人都可以共享自己的目录,然后可以在window下面共享呢?因为Samba管理都是配置 /etc/samba/smb.conf这个文件,所以我们在这个文件分组设置共享目录即可。
2022-09-29 16:26:00 646
原创 使用gpio_direction_output()无法设置GPIO原因分析
3、通过逻辑分析仪抓到的波形分析可以看到,我们的driver是有一段时间把这个GPIO拉高的动作的,但是不久之后这个IO后就有一段很长的拉低拉高的波形,这个波形很像数据传输的波形,最后IO口被拉低,然后我们有理由怀疑这个IO口是和控制器冲突了,通过查看这个IO口可以知道GPIO3_D7在RK3399芯片中是I2S0控制器DATA0输出引脚。echo 1 > /sys/class/gpio/gpio127/value #设置GPIO3_D7输出高电平。linux 应用层操作GPIO。...
2022-08-17 17:41:30 5297 1
原创 git把所有修改的文件打包方法
git diff f4710c4a32975904b00609f3145c709f31392140 HEAD --name-only | xargs tar -rf update_201800001.tar
2022-08-15 17:27:38 1105
原创 打patch 命令
打开patch文件可以看到文件目录是如下图,有一个a/xxxx,所以要忽略a目录就需要设置为p1,如果要忽略drivers目录就需要设置为p2。将path放在kenel根目录下。选项为什么用 -p1?
2022-08-12 17:00:59 1466
原创 二极管和稳压管的区别
公众号欢迎扫码关注本人微信公众号:公众号上分享更多嵌入式知识和资料,分享个人学习嵌入式的心得体会。欢迎大家一起来玩呀。二极管和稳压管的区别第一,二极管一般在正向电压下工作,稳压管则在反向击穿状态下工作,二者用法不同;第二,普通二极管的反向击穿电压一般在40V以上,高的可达几百伏至上千伏,而且在伏安特性曲线反向击穿的一段不陡,即反向击穿电压的范围较大,动态电阻也比较大。对于稳压管,当反向电压超过其工作电压Vz(亦称齐纳电压或稳定电压)时,反向电流将突然增大,而器件两端的电压基本保持恒定。对应的反向伏
2022-05-29 12:53:25 1639
原创 电路积木-稳压电路的使用和原理
公众号欢迎扫码关注本人微信公众号:公众号上分享更多嵌入式知识和资料,分享个人学习嵌入式的心得体会。欢迎大家一起来玩呀。稳压管电路使用由稳压二极管 Dz 和限流电阻 R 所组成的稳压电路是一种最简单的直流稳压电源。从该稳压管稳压电路可以得到两个基本关系式:Ui=Ur+UoIr=Idz+IL在稳压管的参数范围内,可以理解为Uo的电压,也就是稳压管两端的电压是不变的,如果Ui的电压增大,由公式Ui=Ur+Uo可以知道,因为Uo不变,所以Ur会变大,所以可以知道Ui增大的值等于Ur增大的值。电压减
2022-05-29 12:41:30 2324
原创 C语言sizeof()使用方法合集
公众号欢迎扫码关注本人微信公众号:公众号上分享更多嵌入式知识和资料,分享个人学习嵌入式的心得体会。欢迎大家一起来玩呀。sizeof()sizeof在C语言中有什么用呢?sizeof在C语言中可以用来计算数据类型定义的变量占空间的大小,或者已经定义的变量占空间的大小。1、可以计算数据类型的大小,比如int类型。//sizeof的使用方法int a = sizeof(int);//上面我们可以使用sizeof计算int类型定义的变量占空间的大小,因为int类型占4个字节,所以a的值为4。i
2022-05-02 23:21:13 3568
原创 二极管与、或门,三极管非门电路原理
二极管与门电路原理如图,为二极管与门电路,Vcc=10v。假设3v及以上代表高电平,0.7及以下代表低电平。下面根据图中情况具体分析一下:1.Ua=Ub=0v时,D1,D2正偏,两个二极管均会导通,此时Uy点电压即为二极管导通电压,也就是D1,D2导通电压0.7v.2.当Ua,Ub一高一低时,不妨假设Ua=3v,Ub=0v,这时我们不妨先从D2开始分析,D2会导通,导通后D2压降将会被限制在0.7v,那么D1由于右边是0.7v左边是3v所以会反偏。截止,因此最后Uy为0.7v,这里也可以从D1
2022-03-24 09:14:30 5230
原创 warning: unused parameter 消除
第一种方法#define UNUSED(x) (void)xvoid SomeFunction(int param1, int param2){UNUSED(param2);// do stuff with param1}
2022-03-07 11:13:48 1317
转载 mutex和spin lock的区别和应用
多核处理器下,会存在多个进程处于内核态的情况,而在内核态下,进程是可以访问所有内核数据的,因此要对共享数据进行保护,即互斥处理。mutex_lock(struct mutex *lock)和mutex_unlock(struct mutex *lock)是加锁和解锁。(1)mutex和spin lock的区别和应用(sleep-waiting和busy-waiting的区别):信号量mutex是sleep-waiting。 就是说当没有获得mutex时,会有上下文切换,将自己、加到忙等待队列中,直到另
2022-01-07 10:25:02 673
原创 一篇文章讲明白:freeRTOS的任务
公众号欢迎扫码关注本人微信公众号:公众号上分享更多嵌入式知识和资料,分享个人学习嵌入式的心得体会。欢迎大家一起来玩呀。任务在软件中的任务和我们现实当中的任务是类似的,在现实当中有大任务也有小任务。大任务也可以拆解成很多小任务,然后各个小任务一起配合完成一个大任务。在不带操作系统中所有的任务都跑在while(1)大循环中。在带操作系统中的程序任务就可以把大任务分解成很多个小任务,各个小任务互相配合完成程序需要满足的这个大任务。xTaskCreatexTaskCreate是一个建立任务的函数,通过调
2022-01-06 21:26:55 606
原创 一篇文章讲明白:freeRTOS的链表
公众号欢迎扫码关注本人微信公众号:公众号上分享更多嵌入式知识和资料,分享个人学习嵌入式的心得体会。欢迎大家一起来玩呀。链表英文名用list来表示,顾名思义,就和我们常见的项链一样,上面有很多的圆环一个一个的连接起来,只是对于软件来说就是把一个一个对象连接起来,在C语言中我们这个对象就是我们自己定义的各个结构体,我们将这些结构体连接起来,然后就形成了链表。这些结构体中必须有一个node节点,这个节点都是我们所说的项链上的一个个圆环,每个圆环左手拉上一个圆环的右手,圆环的右手拉下一个圆环的左右。他们之间
2022-01-06 21:22:36 1099
原创 一篇文章讲明白:freeRTOS的信号量
公众号欢迎扫码关注本人微信公众号:公众号上分享更多嵌入式知识和资料,分享个人学习嵌入式的心得体会。欢迎大家一起来玩呀。信号量:信号量大家可以理解为我们现实当中的权限,获取到某种资源信号量,这时候你就获取到了使用这种资源的权限,如果你没有获取到信号量你就不能使用这种资源。使用信号量可以使得同一个硬件或者关键函数或者变量,在任何时候都只有一个任务可以使用,别的任务使用这个硬件的时候必须等待信号量释放才能后使用。//获取信号量函数,如果获取不到信号量,则任务会挂起。如果获取到信号量则继续向下执行。//
2022-01-06 21:21:31 732
原创 一篇文章讲明白:freeRTOS的消息队列
公众号欢迎扫码关注本人微信公众号:公众号上分享更多嵌入式知识和资料,分享个人学习嵌入式的心得体会。欢迎大家一起来玩呀。
2022-01-06 21:17:54 1199
原创 C51的一些基础知识
公众号欢迎扫码关注本人微信公众号:公众号上分享更多嵌入式知识和资料,分享个人学习嵌入式的心得体会。欢迎大家一起来玩呀。我们写C51代码的时候给P0口写一些值都是使用P0 = 0Xff,但是这个P0是什么意思,在那里定义呢?其实是在<reg51.h>这个头文件中。我们打开<reg51.h>这个头文件可以看到如下的定义。//表示P0的寄存器地址的值为0x80;sfr P0 = 0x80; sfr SP = 0x81;sf
2022-01-04 14:23:14 1260 2
原创 关于Keil打开工程中的.c文件就无响应卡死的解决办法
出现这个问题一般是在打开别人的工程文件时,由于对方的keil版本与自己keil版本不一致引起的,只要删除这个工程文件下的.uvopt文件即可解决。
2022-01-04 11:35:29 6257 3
原创 一篇文章告诉你晶振的作用
公众号欢迎关注本人微信公众号:公众号上分享更多嵌入式知识和资料,分享个人学习嵌入式的心得体会。欢迎大家一起来玩呀。晶振晶振是用来做什么的?在嵌入式系统中晶振一般用来给单片机或者说MCU提供系统时钟用的,那什么是系统时钟?系统时钟类似于人类的心脏,心脏的跳动人才可以运动、思考。MCU也一样,必须在晶振提供的时钟下才能进行运算。常见的晶振图晶振和MCU连接图如上图连接,晶振和MCU连接在一起,我们还可以看到有两个电容,具体这两个电容是什么作用的,我们学习软件的无需关心。晶振波形上面的
2022-01-03 16:39:46 5439 2
原创 代码规范建议
今日代码规范建议!大家写代码的时候需要消除魔鬼数,什么是魔鬼数看下面图片。/* 魔鬼数消除 什么是魔鬼数?就是使用一个变量代表多种状态,而且这个状态使用1、2、3等数字表示, 这个1、2、3代表什么意思只有写代码的人知道,或者只能去看代码猜测是什么意思*/void speaker_mode_proc(uint8_t mode){ if(mode == 1) { //do something } else if(mode == 3
2021-12-21 09:39:27 118
原创 音频切歌消除POP声或者噪音算法,淡入淡出算法
1、什么是淡入淡出?什么是淡入淡出?淡入为声音的音量从无声渐变到正常,淡出则是声音从正常慢慢的变为无声。2、淡入淡出有什么用?在音乐暂停或者切歌或者切EQ的时候,如果没有淡出,由声音慢慢变成最小再切歌,就会听到一声大大的pop pop声,用户体验非常的不好。所以切歌的时候需要先淡出,然后切换下一首歌曲,然后再淡入。3、淡入淡出算法淡入淡出可以使用算法修改PCM的数据流来实现淡入淡出的效果。4、淡入淡出1kHZ PCM数据效果4.1、下图是正常的1khz的PCM信号4.2、下面是经过淡出淡入
2021-12-17 11:31:58 2798
原创 linux串口读写例子
#include <stdio.h> #include <string.h>#include <errno.h>#include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <termios.h> #include <unistd.h>#define W_BUF
2021-12-16 16:46:29 987
原创 电子电路积木
MUC IO口检测 DC是高电平还是低电平在DC_21V有电压的时候,21V电压经过两个电阻100k和22k的分压,我们可以知道三极管1脚的电平为3.8v,所以三极管导通,POWER_DET接地,所以输入MCU IO口的电平为低电平,反之输入为高电平。为什么是高电平?因为三极管截止,3脚的接MCU的电平就是MCU上拉输入的电平,即高电平。...
2021-12-15 09:45:53 2069
原创 链表英文名用list来表示
链表链表英文名用list来表示,顾名思义,就和我们常见的项链一样,上面有很多的圆环一个一个的连接起来,只是对于软件来说就是把一个一个对象连接起来,在C语言中我们这个对象就是我们自己定义的各个结构体,我们将这些结构体连接起来,然后就形成了链表。这些结构体中必须有一个node节点,这个节点都是我们所说的项链上的一个个圆环,每个圆环左手拉上一个圆环的右手,圆环的右手拉下一个圆环的左右。他们之间的相互牵手然后形成了一个链表。...
2021-11-24 11:29:09 1194
原创 repo仓库使用
使用 Repo 需遵循的格式如下:repo 可选元素显示在方括号 [ ] 中。例如,许多命令会将项目列表用作参数。您可以为项目指定项目列表,作为名称列表或本地源代码目录的路径列表:repo sync [ ]repo sync [</PATH/TO/PROJECT0> … </PATH/TO/PROJECTN>]help安装 Repo 后,您可以通过运行以下命令找到最新文档(开头是包含所有命令的摘要):repo help您可以通过在 Repo 树中运行以下命令来获取
2021-11-19 09:26:08 1716
Flexmem_demo例程指南.pdf
2019-08-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人