自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 收藏
  • 关注

原创 H618-配置静态IP

注意每行后面不能有空格,否则会导致IP配置失败。修改文件后保存,重启设备。能正常ping通局域网也能ping通外网,说明我们配置成功。1、修改文件interfaces。2、验证是否配置成功。

2025-11-06 17:58:43 224

原创 H618-实现基于RTMP推流的视频监控

从图中我们可以看出,要想要实现 RTMP 视频监控,必须要有这三部分:推流客户端、流媒体 服务器以及拉流客户端。那这些需要我们自己去实现吗?当然不需要,譬如推流我们可以使用 FFmpeg 来做,流媒体服务器则使用 Nginx 来搭建,而拉流则可以用 VLC 播放器来实现。

2025-10-22 18:03:31 690

原创 H618-用input子系统实现按键的输入

按键、鼠标、键盘、触摸屏等都属于输入(input)设备,Linux 内核为此专门做了一个叫做 input 子系统的框架来处理输入事件。输入设备本质上还是字符设备,只是在此基础上套上了 input 框架,用户只需要负责上报,比如按键值、坐标等信息,input 核心层负责处理这些事件。从这里我们可以看出input子系统的所有设备的主设备号都是13。我们通过input子系统实现按下按键,主动上报相应键值。

2025-10-15 17:46:26 984

原创 H618-设备树插件

Linux4.4 以后引入了动态设备树 (Dynamic DeviceTree),也可以称“设备树插件”。设备树插件可以理解为主设备树的“补丁”它动态的加载到系统中,并被内核识别。例如我们要在系统中关闭UART驱动,那么我们可以针对UART这个硬件设备写一个设备树插件,然后编译、加载到系统即可,无需重新编译整个设备树。设备树插件是在设备树基础上增加的内容。

2025-10-14 16:42:36 563

原创 H618-实现一个基于设备树的LED驱动

实现应用端控制蓝灯的亮灭。

2025-10-14 11:55:53 1200

原创 H618-实现一个字符设备驱动

实现应用程序打开文件后,写入hello world,再关闭重新打开文件,读取刚写入的内容。

2025-10-13 11:42:28 729

原创 H618-内核驱动的第一个hello world

1、下载安装交叉编译器mkdir arm2、获取编译工具链3、修改~/.bashrc 文件,永久保存环境变量 vim ~/.bashrc ,将下面的环境变量放在文件末尾,需要根据实际指定编译工具链的绝对路径4、重新加载配置 source ~/.bashrc5、查看编译工具链。

2025-10-10 15:37:24 584

原创 H618-配置WIFI网卡

通过命令ifconfig -a查看网络接口信息,WIFI的网卡为wlan0;通过nmcli工具配置wifi网卡;已经能成功连上wifi;

2025-09-29 16:48:35 345

原创 H618-应用编程实现串口的收发数据

之前我们用minicom实现了串口数据的收发,具体可参考,这章我们通过应用编程方式实现串口数据的收发。由于UART5处于空闲状态,所以我们采用UART5;

2025-09-29 15:42:47 1031

原创 H618-应用编程实现蓝牙广播与扫描

define ADV_CHANNEL_MAP 0x07 // 使用所有3个广播信道(37/38/39)#define ADV_INTERVAL_MS 100 // 广播间隔100ms。// 长度=类型+数据。#define ADV_TYPE_CONNECTABLE 0x00 // 可连接非定向广播。0x10, 0x00, // 扫描间隔:16*0.625ms=10ms。

2025-09-28 18:35:58 632

原创 H618-用minicom测试开发板串口的收发

经查看手册,ttyAS0用于Debug,ttyAS1用于与蓝牙模块通信,ttyAS5暂时没用,所以打算用串口5来测试数据收发。1、查看dev下开发板已经使能的串口。2、安装minicom。3、配置minicom。

2025-09-27 15:16:10 303

原创 H618-开发板运行第一个Hello World

KICKPI开发板是ARM架构,而PC机是X86架构,如果程序要在开发板中运行,需要程序在开发板中编译、运行,或者程序在PC机上采用交叉编译器进行编译,再将可执行文件发送给开发板,在开发板中运行。

2025-09-27 14:21:47 598

原创 H618-源码编译与镜像文件下载

tar -xvf h618-linux-20240810.tar.gz,解压后得到aw-image-build 文件。下载SD Card Formatter软件对TF卡进行格式化。烧录成功后,将TF卡插入开发板中,程序正常启动。下载balenaEtcher烧录镜像文件。4、将TF卡中的固件拷贝至EMMC中。开发板断电,并取出TF卡重新上电。一张至少16G以上的TF卡。程序从EMMC中正常启动。2、Git恢复源码目录。等待编译得到镜像文件。

2025-09-26 16:46:33 513

原创 H618-KICKPI主板硬件

其中*表示默认管脚定义。

2025-09-25 18:35:51 477

原创 设置好uboot网络地址后,ping主机时,uboot重启

一、问题1、按着教程配置好uboot的网络后,ping主机IP时,uboot重启。setenv ipaddr 192.168.0.50setenv ethaddr 00:04:9f:04:d2:35setenv gatewayip 192.168.0.1setenv netmask 255.255.255.0setenv serverip 192.168.0.66saveenv2、配置好后利用printenv查看环境变量也没有问题。3、ping虚拟主机的ip地址 ping

2021-03-20 16:14:12 3112 7

原创 浅析STM32生成的axf、hex、bin文件

一、前言我们在STM32的开发过程中,使用MDK编译后会生成axf、hex、bin文件,这三个文件都可以烧录到板子上去,但这三个文件具体有什么差异呢?二、文件的差异1、axf文件:编译中默认生成的文件,不仅包含代码数据还包含调试信息,我们用MDK进行debug时用的就是该文件;2、hex文件:使用十六进制符号表示的代码记录, 记录了代码应该存储到FLASH 的哪个地址,下载器可以根据这些信息辅助下载;3、bin文件:最直接的代码映像,依据axf文件生成;以上三种文件其中axf文件最大

2020-12-03 11:56:47 5270

原创 CC2640R2F之NOTIFY内存泄漏

一、背景客户希望通过notify方式上报状态,以此调了下notify,调完后功能是实现了,但是对蓝牙的通知函数有点疑问。static bStatus_t gattServApp_SendNotiInd( uint16 connHandle, uint8 cccValue, uint8 authenticated, gattAttribute_t *pAttr, ...

2020-11-30 17:35:14 622

转载 通俗讲解LORA中的跳频和扩频

转至:https://www.eemaker.com/lora-kuopintiaopin.htmllora是一种实现远距离低功耗的无线调制技术。实际测试,在深圳这种高楼林立的地方不加PA也可以达到上千米的传输距离。如果放在空旷没有什么障碍物的地方达到3-5km也是不成问题。那么lora相比于传统的无线调制之所有可以传输更远的距离,归功于lora使用了扩频、跳频、向前纠错等等关键特性。而关于跳频和扩频很多人把他放在一起来说,让初接触者不免产生疑问,扩频和跳频到底有什么关系,为什么这两个特性可以提高传

2020-10-09 18:40:49 3206

原创 三、QT之debug日志信息保存

一、前言有时候我们查看QT运行后的日志信息以便于我们查找上位机运行状态中的问题与记录。二、实现方法

2020-08-07 14:25:24 765 1

原创 二、QT之QLabel超级链接实现方法

QT中可以通过两种方法给一个QLabel对象添加链接方法一: ui->label->setText(tr("<a href = 'https://blog.csdn.net/welbell_uplooking'>XX的博客</a>")); ui->label->setOpenExternalLinks( true ); 不需要添加信号与槽方法二: ui->label->setText(tr("<a hr...

2020-07-29 12:04:01 1500

原创 一、QT之串口通讯

一、前言最近用QT制作一个界面,需要实现一个简单的串口通讯,网上也有很多这方面的资料,这里就总结下。二、过程1、实现一个简单的UI界面2、在项目文件管理中(.pro)中添加 serialport模块QT += serialport3、添加相应的头文件,并定义变量QSerialPort my_serialPort;4、在构造函数中实现查找并能使用的串口号这里用了一个关键字foreach,它能查找容器中可用的串口端口号。5、打开串口6、

2020-06-10 11:22:13 891

转载 IAR如何生成库和使用库

https://blog.csdn.net/duping2016/article/details/75096217

2020-05-21 17:50:28 646

转载 modbus系列文章—汇总

https://blog.csdn.net/liming0931/article/details/103004877

2020-04-15 16:46:15 208

原创 探索STM32地址与偏移

疑问:一直对STM32地址存储有点疑问,比如STM32是一个32位的MCU,那是不是表示一个地址可以存储32位,这样理解看起来好像是没有问题,但是实际你查看手册,你会发现按着这个理解方式,似乎有点不对。这里我们以stm32F103x系列为例,首先我们来看手册。通过GPIO端的地址,我们可以发现相邻两个寄存器之间偏移0x04,而且一个寄存器存储32位,如果真是一个地址存储32位话,那偏移应该...

2020-04-15 11:26:59 6013 10

转载 七、读写锁

01. 读写锁概述当有一个线程已经持有互斥锁时,互斥锁将所有试图进入临界区的线程都阻塞住。但是考虑一种情形,当前持有互斥锁的线程只是要读访问共享资源,而同时有其它几个线程也想读取这个共享资源,但是由于互斥锁的排它性,所有其它线程都无法获取锁,也就无法读访问共享资源了,但是实际上多个线程同时读访问共享资源并不会导致问题。在对数据的读写操作中,更多的是读操作,写操作较少,例如对数据库数据的读写应...

2019-12-19 18:10:26 552

转载 六、互斥锁

01. 互斥锁引入为什么需要互斥锁?在多任务操作系统中,同时运行的多个任务可能都需要使用同一种资源。这个过程有点类似于,公司部门里,我在使用着打印机打印东西的同时(还没有打印完),别人刚好也在此刻使用打印机打印东西,如果不做任何处理的话,打印出来的东西肯定是错乱的。下面我们用程序模拟一下这个过程,线程一需要打印“ hello ”,线程二需要打印“ world ”,不加任何处理的话,打印出...

2019-12-19 17:49:48 421

转载 五、进程间通信

01. 进程间通信概述进程是一个独立的资源分配单元,不同进程(这里所说的进程通常指的是用户进程)之间的资源是独立的,没有关联,不能在一个进程中直接访问另一个进程的资源(例如打开的文件描述符)。但是,进程不是孤立的,不同的进程需要进行信息的交互和状态的传递等,因此需要进程间通信( IPC:Inter Processes Communication )。02. 进程间通信目的进程间通信的目...

2019-12-17 19:11:47 184

转载 四、进程与线程

01. 进程和线程区别在许多经典的操作系统教科书中,总是把进程定义为程序的执行实例,它并不执行什么, 只是维护应用程序所需的各种资源,而线程则是真正的执行实体。为了让进程完成一定的工作,进程中必须至少包含一个线程。进程,直观点说,保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己的地址空间,有自己的堆,上级挂靠单位是操作系统。操作系统会以进程为单位,分配系...

2019-12-16 19:02:33 150

转载 三、特殊进程之孤儿进程

01. 孤儿进程概述父进程运行结束,但子进程还在运行的子进程就称为孤儿进程(Orphan Process)。孤儿进程最终会被 init 进程(进程号为 1 )所收养,并由 init 进程对它们完成状态收集工作。孤儿进程是没有父进程的进程,为避免孤儿进程退出时无法释放所占用的资源而变为僵尸进程,进程号为 1 的 init 进程将会接受这些孤儿进程,这一过程也被称为“收养”。init 进程就好像...

2019-12-13 16:42:04 398

转载 一、Linux文件操作

01. 文件描述符在 Linux 的世界里,一切设备皆文件。我们可以使用系统调用中 I/O 的函数(I:input,输入;O:output,输出),对文件进行相应的操作( open()、close()、write() 、read() 等)。打开现存文件或新建文件时,系统(内核)会返回一个文件描述符,文件描述符用来指定已打开的文件。这个文件描述符相当于这个已打开文件的标号,文件描述符是非负整...

2019-12-13 16:35:39 258

转载 二、大端模式和小端模式

01. 概述大端模式(Big-endian):高位字节排放在内存的低地址端,低位字节排放在内存的高地址端,即正序排列,高尾端;小端模式(Little-endian):低位字节排放在内存的低地址端,高位字节排放在内存的高地址端,即逆序排列,低尾端;例(无论是小端模式还是大端模式。每个字节内部都是按顺序排列):大端模式:低地址 -----------------> 高地址0x...

2019-12-13 16:30:23 1835

原创 基于CC2640R2F的PWM开发

前言:将CC2640R2F中一个管脚设置成PWM模式,然后接一个有源蜂鸣器,这样能产生滴滴的声音,通过改变PWM的占空比或者频率能产生不同的滴滴声。接下来看我们如何实现。初始化:我们用的是DIO5作为PWM脚void HwPWMInit(void){ PWM_init(); PWM_Params_init(&PWMparams); //Buzzer PWMpara...

2019-12-04 17:41:55 785

原创 如何使用JLINK工具下载STM32单片机固件程序

https://www.cnblogs.com/zhaoyanan/p/7838363.html

2019-07-31 17:19:24 2017

原创 三、基于CC2640R2F的电池电压检测开发

我们一般电池电压检测都是通过IO口的AD转换来采集电压。但是由于项目的IO口资源比较少,刚好2640内部具有检测电池电压的功能,所以,我们打算用内部的电路来检测电压,具体实现如下。一、包含相应的头文件#include <driverlib/aon_batmon.h>二、使能电池检测AONBatMonEnable();三、开始电池电压检测AONBatMonBatt...

2019-07-02 17:27:55 1439

原创 二、基于CC2640R2F的LED灯开发

实现功能今天我们来简单介绍下CC2640R2F基于GPIO口的开发,我们先实现点亮一个LED灯。从原理图可以看出,我们只需给DIO4一个高电平,LED就亮了。实现步骤#define CC2640R2DK_5XD_KEY_DOWN IOID_4 /* P1.12 */#define Board_RLED ...

2019-06-19 11:41:56 873 7

转载 中断上下文

一、中断下半部-工作队列1、中断 先看一下宋宝华先生的《linux设备驱动开发详解》里面对中断的描述吧。这本书个人感觉 写的比较好,从开始学驱动到现在,还能从中得到不少知识。 设备的中断会打断内核中进程的正常调度和运行,系统对更高吞吐率的追求势必要求中断服务程序尽可能地短小精悍。但是,这个良好的愿望往往与现实并不吻合。在大多数真实...

2019-06-18 15:09:34 183

原创 一、基于CC2640R2F的按键开发

背景今年上半年一直在负责基于CC2640R2F挂锁项目的开发,项目目前基本完成,分享下2640各个外设的开发。实现功能短按进入NB模式,长按3s左右进入BLE模式,长按5s关机。实现步骤首先按键作为一个输入设备,我们应该把IO口设置成输入上拉模式,其次还涉及到消抖处理,防止误触发。由于该按键需实现长短按,于是把IO口设置成双边沿触发中断,具体实现如下://配置IO位输入上拉...

2019-06-18 10:23:41 1775 1

原创 GPIO口的八种工作状态

一直对GPIO的工作状态不是很熟悉,导致在设置IO状态时,经常会设置成推挽上拉,或者推挽下拉,开漏上拉等问题,虽然看起来没有影响MCU工作,但感觉这是一种无知的表现。现在总结下GPIO口的八种工作状态,其中四种输入状态,四种输出状态。一、输入状态1、浮空输入2、上拉输入3、下拉输入4、模拟输入二、输出状态1、推挽输出2、开漏输出3、复用推挽输出4、复用开...

2019-06-06 10:55:18 10297

原创 关于CC2640R2F的OAD升级

一、概念1、什么是OAD升级通过蓝牙对MCU进行空中升级。2、什么是片外OAD升级利用蓝牙将升级包下载到外部的flash中,然后再重启MCU,MCU启动后,再去外部的flash中读取升级包,最后将拷贝到内部的flash中。3、CC2640R2F的升级方式由于CC2640R2F的rom大小有限,以致不支持利用内部flash进行升级,只支持外部flash升级。4. 工程介绍...

2019-04-11 10:50:56 1571 1

转载 STM32的时钟源

一、在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。①HSI是高速内部时钟,RC振荡器,频率为8MHz。②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。③LSI是低速内部时钟,RC振荡器,频率为40kHz。④LSE是低速外部时钟,接频率为32.768kHz的石英晶体。⑤PLL为锁相环倍频输出,其时钟输入...

2018-11-14 16:24:51 9801

空空如也

空空如也

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

TA关注的人

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