- 博客(24)
- 收藏
- 关注
原创 Linux shell脚本
脚本:本质是一个文件,文件里面存放的是 特定格式的指令,系统可以使用脚本解析器 翻译或解析指令并执行(它不需要编译)。此文件为Linux系统为每个用户设置环境变量,当用户第一次登陆时,该文件会被执行。系统的公共环境变量在这里设置,开始自启动的程序,一般也在这里设置。它接收用户输入的命令,并把它送入内核去执行,是一个命令解释器。①chmod +x xxx.sh(添加可执行权限) ./xxx.sh(执行脚本)自动执行:写到其他脚本中,利用脚本去调用。./xxx.sh 先按照#!可以手动执行脚本或自动执行脚本。
2023-12-17 13:49:36
443
1
原创 ubuntu交叉编译工具略讲
在 Linux 进行 C 语言开发,里面使 用 GCC 编译器进行代码编译,但是 Ubuntu 自带的 gcc 编译器是针对 X86 架构的!交叉编译器有很多种,我们使用 Linaro 出品的交叉编译器,Linaro 一间非营利性质的开放 源代码软件工程公司,Linaro 开发了很多软件,最著名的就是 Linaro GCC 编译工具链(编译器)。3、这个 GCC 编译器是编译 ARM 架构代码的,也就是编译出来的可执行文件是在 ARM 芯 片上运行的。1、它肯定是一个 GCC 编译器。
2023-12-16 11:20:24
474
原创 Makefile基础规则
由于 main 还不存在,因此第一条规则会执行,第一条规则依赖于文件 main.o、input.o 和 calcu.o这个三个.o 文件,这三个.o 文件目前还都没有,因此必须先更新这三个文件。最后一个规则目标是 clean,它没有依赖文件,因此会默认为依赖文件都是最新的,所以其对应的命令不会执行,当我们想要执行 clean 的话可以直接使用命令“make clean”,执行以后就会删除当前目录下所有的.o 文件以及 main,因此clean 的功能就是完成工程的清理。这是Makefile 的语法要求。
2023-12-16 10:40:38
443
原创 Linux GCC 编译流程
就是将汇编出来的多个二进制目标文件链接在一起,形成最终的可执行文件,链接的时候还会涉及到静态库和动态库等问题。就是展开所有的头文件、替换程序中的宏、解析条件编译并添加到文件中。是将经过预编译处理的代码编译成汇编代码,也就是我们常说的程序编译。GCC 编译器的编译流程是:预处理、编译、汇编和链接。就是将汇编语言文件编译成二进制目标文件。
2023-12-13 08:57:02
421
原创 嵌入式Linux必备命令
修改为:`df命令可以用来显示系统中磁盘分区的空间使用情况,可以显示磁盘分区的总容量、已用空间、可用空间等信息,可以用该命令来检查磁盘是否已满或需要清理垃圾文件。修改为:`free命令可以用来显示系统中内存的使用情况,可以显示系统总内存、已用内存、空闲内存等信息,可以用该命令来查看系统内存是否充足或内存泄漏的情况。`chmod`命令用于更改文件或目录的权限,可以授予或剥夺用户、群组和其他用户的读、写和执行权限。该命令需要两个参数:要更改权限的文件或目录的名称,以及文件或目录的权限参数。
2023-12-10 16:21:47
1032
原创 STM32DAC应用
第三个参数 DAC_LFSRUnmask_TriangleAmplitude 用来设置屏蔽/幅值选择器,这个变量只在使用波形发生器的时候才有用,这里我们设置为 0 即可,值为DAC_LFSRUnmask_Bit0。//使能DAC通道1。
2023-12-10 15:27:53
648
原创 STM32DMA应用
DMA全称Direct Memory Access,即直接存储器访问。简单来讲,它的功能是把数据从一个地址搬运到另一个地址。通常有三个传输方向,分别是内存到内存,内存到外设和外设到内存。直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作。比如在串口接收或者发送时可以直接利用DMA将接收内容直接搬运到接收数组。或者利用DMA将准备发送的数据搬运到发送的缓冲区。
2023-12-10 11:41:32
910
原创 STM32AD多通道转换
看似简单但实际操作会遇到问题,问题一:扫描模式下,启动列表后,里面的每一个单独的通道转换完成之后不会产生任何标志位,也不会触发中断,无法知道某个通道是否转换完毕,只有在整个列表转换完成后才会产生一次EOC标志位,才可触发中断;还有一个方法,单次转换、非扫描模式基础上,在每次触发转换之前,手动更改下列表第一个位置的通道,比如第一次转换先写入通道哦,之后触发、等待、读值;
2023-12-10 11:04:07
512
原创 线程与进程
当然不是,多线程也有它的缺点、劣势, 譬如多线程编程难度高,对程序员的编程功底要求比较高,因为在多线程环境下需要考虑很多的问题, 例如线程安全问题、信号处理的问题等, 编写与调试一个多线程程序比单线程程序困难得多等等缺点,多进程编程通常会用在一些大型应用程序项目中,譬如网络服务器应用程序,在中小型应用程序中用的比较少。多进程编程的劣势:多个进程同时运行(指宏观上同时运行),微观上依然是轮流切换运行,进程间切换开销远大于同一进程的多个线程间切换的开销,通常对于一些中小型应用程序来说不划算;
2023-11-12 15:36:22
54
1
原创 CAN通信详解
CAN通信采用两根线路,CAN高和CAN低,通过差分信号进行传输。其传输速率高,通信距离远,最高可达1Mbps(距离小于40M),最远可达10KM(速率低于5Kbps)。同时,CAN通信具有错误检测、错误通知和错误恢复功能,保证了数据传输的可靠性。在实际使用过程中,为了调试和测试的方便,CAN总线的物理层通常会提供一些额外的功能。CAN通信是一种串行通信协议,由德国BOSCH公司开发,并最终成为国际标准(ISO 11898),是国际上应用最广泛的现场总线之一。
2023-11-12 09:40:23
442
1
原创 通信方式分类
半双工通信:指可以实现双向的通信,但不能在两个方向上同时进行,必须轮流交替地进行。比如:RS485,IIC,CAN等。全双工通信:指通信的任意时刻,线路上存在A到B和B到A的双向信号传输。比如:UART,RS232,SPI等。单工通信:指发送端只能发送信息,不能接收信息,接收端只能接收信息,不能发送信息;比如:UART(通用异步收发器),CAN,单总线。并行通信:指一组八位数据一起发送,通常需要八条数据线进行传输。串行通信:指数据一位一位地发送,通常使用一条数据线进行传输。比如:SPI,IIC通信接口。
2023-11-12 09:12:43
267
1
原创 STM32HAL库和标准库的趋势
随着STM32芯片应用的广泛,对于高效、简洁、易用的库的需求也越来越高。STM32HAL库作为ST公司新推出的库,具有更高的抽象整合水平,更关注各外设的公共函数功能,便于定义一套通用的用户友好的API函数接口,可以轻松实现从一个STM32产品移植到另一个不同的STM32系列产品。HAL库相比标准库,所用的API函数不一样,两者也相互独立,但HAL库的开发者无需关注底层的实现细节,从而提高了开发效率。相比之下,标准库虽然提供了更底层的接口,可以更好地控制资源的利用,但相对来说开发效率较低,且移植性较差。
2023-11-12 08:21:37
405
1
原创 STM32中断优先级判断
当两个中断的抢占优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果程序正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个。STM32中有两个优先级的概念——抢占式优先级和响应优先级,优先级判断是先判断抢占优先级,然后再判断响应优先级。具有高抢占优先级的中断可以打断具有低抢占式优先级的中断,即中断嵌套。
2023-11-06 21:38:48
644
原创 STM32可以跑Linux吗?
MMU是现代计算机操作系统中一个重要的组成部分,它能提高系统的稳定性和安全性。在内存管理方面,MMU通过页面表实现虚拟内存管理,当CPU发出一个虚拟地址时,MMU会通过页面表查找并将其转换为对应的物理地址。MMU是一种硬件模块,它位于中央处理器(CPU)内部,负责在CPU和内存之间实现虚拟内存管理。STM32有没有内存管理单元MMU,它负责虚拟地址到物理地址的映射。操作系统有两种 用MMU的 和 不用MMU的。CPU有两种 带MMU的 和 不带MMU的。不带MMU的有 Cortex-M系列。
2023-11-06 21:09:07
666
原创 Linux为什么会引入设备树?
因此引入了设备树文件,从而可精简一些臃肿的C代码。除此之外,.dts编译生成.dtb文件的过程要比.c编译生成驱动模块、加载驱动模块的过程要简单很多,也更方便我们进行开发。使用过platform_device结构体来描述led设备(硬件资源)。既然已经有了描述设备的方法了,为什么还要引入设备树呢?因为Linux内核中有很多BSP(板级支持包),不同的BSP会包含着不同的描述设备的代码(.c或.h文件)。随着芯片的发展,Linux内核中就包含着越来越多这些描述设备的代码,导致Linux内核代码越来越臃肿。
2023-11-05 17:06:34
134
原创 什么是pinctrl子系统和gpio子系统
当pinctrl子系统配置引脚为GPIO模式后,才能用gpio子系统控制引脚。gpio 子系统是基于 pinctrl 子系统的,gpio 的 API 接口的实现很多都是基于 pinctrl 子系统的函数。pinctrl子系统 用于引脚的配置。如复用为哪种引脚(GPIO模式,I2C模式),电器特性等等。引脚有多种功能,引脚复用。GPIO只是其中一种模式。gpio子系统 用于引脚的控制。如配置输入输出,输出高低电平等等。
2023-11-05 16:52:02
48
原创 Linux驱动两种运行方式
第一种就是将驱动编译进 Linux 内核中,这样当 Linux 内核启动的时候就会自动运行驱动程序。第二种就是将驱动编译成模块(Linux 下模块扩展名为.ko)
2023-11-05 16:36:58
70
原创 标准接口与非标准接口
设备驱动框架为驱动开发和应用层提供了一套统一的接口规范, 譬如对 LED 类设备来说, 内核提供了 LED 设备驱动框架,驱动工程师编写 LED 驱动时,使用 LED 驱动框架来开发自己的 LED 驱动程序,这样做的好处就在于,能够对上层应用层提供统一、标准化的接口、同时又降低了驱动开发工程师的难度。所以在嵌入式系统中,很多硬件外设的驱动程序都是定制的。Linux 内核中为了尽量降低驱动开发者难度以及接口标准化,就出现了设备驱动框架的概念;一种设备类型,无奈只能把它归为杂项类。
2023-10-27 16:50:14
349
1
原创 Linux应用层对底层硬件操作方法
当然跟设备驱动具体的实现方式有关,通常情况下,一般简单地设备会使用 sysfs 方式操控,其设备驱动在实现时会将设备的一些属性导出到用户空间 sysfs 文件系统,以属性文。具体使用哪种方式需要根据不同功能类型设备进行选择,有些设备只能通过设备节点进行操控,而有些设备只能通过 sysfs 方式进行操控;但对于一些较复杂的设备通常会使用设备节点的方式, 譬如 LCD 等、触摸屏、摄像头等。⚫ /dev/目录下的设备文件(设备节点);⚫ /sys/目录下设备的属性文件。
2023-10-27 15:34:05
103
1
原创 LSM6DS3陀螺仪角度数据的读取
(1)调用lsm6ds3_device_id_get(&dev_ctx, &whoamI)函数读取设备ID可以验证模拟IIC是否成功。(1)imu芯片用的是IC_MIS_LSM6DS3TR。(2)在main函数里调用lsm6ds3_Get_Gyroscope();函数,效果如下图所示。初始化设置角加速度和角速度的分辨率分别是2g和125dps。(2)编写模拟I2C驱动,因为imu采用I2C通信。(3)对应的读写函数、打印函数、延时函数 的实现。设置数据输出频率833Hz。可以看得出有零点偏移。
2023-10-24 17:24:35
993
2
原创 “PL2303HXA自2012已停产,请联系供货商“ USB不识别
链接:https://download.youkuaiyun.com/download/weixin_49834395/88446422。RS485转串口 连接到电脑无法识别,显示“PL2303HXA自2012已停产,请联系供货商”。打开设备管理器,在端口(COM和LPT)中选择对应的USB COM口的旧版本驱动。
2023-10-19 19:59:44
2505
原创 Linux单片机与虚拟机网络通信之配置
2,设置uboot环境变量,确保ubuntu主机和开发板的IP地址在同一个网段内。2,Linux图形化界面设置网络 DNS服务器可以用计算机的。5, 网络重启:service network restart。3,ping ubuntu主机IP 是否可以ping通。3,ping baidu.com 是否可以ping通。1,查看计算机网络,将虚拟网络与以太网桥接。1,查看虚拟网络IP地址,子网掩码,网关。4,单片机启动时修改启动环境变量。
2023-10-16 18:52:02
275
2
卡尔曼滤波资料及仿真实现
2024-04-16
51单片机-秒表课程设计
2023-11-09
全国大学生电子设计大赛 stm32F103程序模板
2023-10-25
51单片机(STC89C52) 模拟四路抢答器 代码
2023-10-17
51单片机(STC89C52) 模拟电梯控制 代码
2023-10-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人