自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ONENET数据可视化命令框下发命令使用

我问了技术支持,他们说现在的数据可视化中的命令框还不支持下发命令的操作。只能通过api调用和页面中的命令下发进行操作。属性格式的命令下发可以在设备调试中进行命令的下发如下图。数据流格式的命令下发可以在这里操作如下图。

2025-03-17 21:39:44 185

原创 Can总线中同时发送数据帧和同时发送远程帧仲裁机制

当节点A和B同时发送数据帧时,总线会根据线与特性和回读机制对节点的ID进行优先级比较和仲裁(can是高位先行),比较节点A、B的ID可以发现节点A的ID比节点B的ID小,数据位是从高位到低位依次比较,节点B出现差异且数据位bit1为1,此时节点B仲裁失利;其实这样并不会造成总线冲突,因为节点A和节点C发送的远程帧是一样的,在总线上表现出来的信号也是一样的,所以不会引起总线冲突,所以不会产生总线仲裁。can总线帧格式协议中的数据帧的仲裁段ID是发送方的ID;远程帧的仲裁段ID是被请求发送方的ID。

2024-12-30 15:07:39 400

原创 串口空闲中断+DMA收发不定长数据

问题原因:误认为hal库串口的空闲中断和接收中断使用的是同一个接收回调函数HAL_UART_Receive_IT(该函数会开启接收中断:标志位UART_IT_RXNE),经过查找发现接收中断回调函数只是在置位接收中断RXNE标志位后才会中断,对于空闲中断IDLE则不会发生中断,所以进行调试的时候程序一直无法响应。问题原因:查阅手册发现DMA的数据流数据项数寄存器NDTR只有在禁止数据流时才能进行此寄存器的写操作;解决办法:需要单独的使能空闲中断,并且需要自己声明,定义并实现空闲中断回调函数。

2024-12-10 15:56:20 461

原创 I2C为什么配置成开漏输出和I2C的线与特性

拿GPIO输出模式为例,当引脚配置成输出模式时,是图上的下面部分接通,这时只能进行输出,主机和从机都是输出模式并且主机输出高电平,从机输出低电平时,输出的电流只经过导线没有负载,电流是从高电平流向低电平,会直接通过主机和从机的两个mos管直接连接电源正极和接地造成短路 如下图所示。而下面的mos管电流只能从左向右。开漏输出外接两个上拉电阻是为了将I2C总线在空闲时表现为高电平状态(电平被上拉电阻拉高),所以只要在总线中有从机输出低电平,那么总线上的电平就会被这个从机给拉低,I2C总线表现为低电平状态;

2024-12-06 09:22:06 550

转载 malloc函数在单片机程序中是否应该使用

malloc的全称是memory allocation,中文叫动态内存分配。函数原型,专业解释还是套用百度百科:对于malloc函数,应该所有嵌入式工程师都知道,即便没用过也都听过,通过上面简单的说明,也都能够知道是干什么用的。注意上面红色框框部分,malloc开辟的是连续的空间,返回的是一个地址,当内存不使用,需要使用free()函数释放内存。本文算是详细分析了一下 malloc 函数在单片机上的使用效果,我们知道了 malloc 函数使用申请了内存空间在哪里,我们也知道了内存碎片是如何产生的。

2024-11-29 09:32:49 61

原创 stm32基于HAL库的串口UART中断接收不定长数据代码实现

总体分析:代码使用的串口USART1,GPIO的复用引脚分别是:PA9复用为RX引脚;数据接收标志符为"\r\n"即回车按键按下,当接收到\r\n时接收停止。接收数据缓冲区只能容纳一个字节数据,设置的接收一个字节数据产生一次接收中断,在中断回调函数中进行串口接收协议的编写。下面的代码是死的,只需要复制到工程内就可以实现数据打印到串口。在轮训过程中不建议一直读取串口接收的数据,建议在没有数据被接受时执行其他的代码。代码现象:将接受的数据重新发送至串口进行回显。注意箭头位置输入了回车按键。

2024-11-29 08:52:13 940

原创 FreeRTOS的时间片调度机制

时间片定义:调度方式:任务切换:系统设计:资源利用:简化配置:

2024-11-16 09:10:14 292

原创 IMX6ULL裸机驱动RGBLCD显示屏原理分析与代码编写

但是 I.MX6U 的 BOOT 设置也用到了 LCD_DATA7、LCD_DATA15 和 LCD_DATA23 这三个引脚,所以接上屏幕以后屏幕上的 ID 电阻就会影响到 BOOT 设置,会导致代码无法运行,所以先将其隔离开来,如果要使用 RGB LCD 屏幕的时候再通过 LCD_DE 将其“连接”起来。Bit20设置vsync信号的宽度单位 ,设置为1。CCM_CSCDR2寄存器的bit17:15,设置LCDIF_PRE_CLK_SEL,选择LCDIF_CLK_ROOT的时钟源,设置为0x2。

2024-11-13 22:00:02 2168 4

原创 jetson nano开发板安装qtcreator

在终端输入下面两行命令,不行我直接吃。

2024-11-11 08:54:51 134

原创 解决虚拟机下ubuntu系统窗口分辨率无法全屏自适应屏幕分辨率

一行命令搞定,在终端输入下面命令安装open-vm-tools-desktop,不行我直接吃。

2024-11-11 08:51:58 383

原创 C++纯手撕栈容器Stack

根据栈容器的一些接口功能使用类模板写了一个可以通用c++内置数据类型的栈容器类。话不多说,直接上代码。我这里的扩容机制是2倍扩容。Stack.hpp文件。

2024-11-04 21:31:15 263

原创 ARM裸机中断处理流程

在裸机开发中,中断信号产生后到中断处理的底层过程是一个复杂但有序的过程,它涉及硬件和软件之间的紧密协作。

2024-10-28 21:02:13 519

原创 中断向量表概念与偏移

综上所述,中断向量表的基地址是否需要跟着代码运行地址一起偏移取决于具体的系统设计和处理器架构。在大多数情况下,如果代码运行地址和中断向量表基地址都是固定的,并且满足系统的需求,那么就不需要进行偏移。然而,在一些特殊情况下,可能需要对它们进行偏移以满足系统的需求。当处理器接收到中断信号时,它会根据中断号跳转到中断向量表中对应的中断服务例程。在ARM Cortex-M系列处理器中,中断向量表通常位于内存的起始位置,但也可以通过配置寄存器来改变其位置。

2024-10-17 16:46:20 628

原创 IMX6U系统内核主频配置原理分析以及代码编写实现

通过上一篇博客的分析,知道了系统内核主频是由PLL1进行设置,时钟源PLL1通过设置寄存器CACRR的位[ARM_PODF]来进行频率的分频,注意图片中灰色的/2并没有真的2分频,因为如果分频都是控制寄存器的某个位来进行的,但是这个灰色的/2上并没有显示对应的寄存器位。运行成功,由于delay延时函数是在396MHz下设置的函数,原先设置的是每隔2000ms led闪烁一次 在设置完成内核主频是528MHz,我们可以在原先396MHz下录一段led灯闪烁的视频对比当前528MHz下led闪烁的时间间隔。

2024-10-16 20:13:49 596

原创 IMX6U系统时钟原理框架分析

②、此部分是 ESAI 时钟的前级分频,分频值由寄存器 CCM_CS1CDR 的 ESAI_CLK_PRED来确定的,可设置 1~8 分频,假如现在 PLL4=650MHz,我们选择 PLL4 作为 ESAI 时钟,前级分频选择 2 分频,那么此时的时钟就是 650/2=325MHz。从图中可以看到对应的最左边就是系统的时钟源OSC24MHz的晶振。选择合适的时钟源,这里的时钟源有四个可以选择,黑线(PLL4)、绿线(PLL3的PFD2)、蓝线(PLL5)、粉线(暂且认为选择的是PLL3)。

2024-10-16 15:23:14 1455

原创 基于I.MX6U的通用GPIO驱动编写

控制IO的输入和输出是非常常用的功能,一般在操作时都是直接操作GPIO的寄存器,其实我们完全可以对GPIO寄存器进行提炼,做一个针对GPIO的驱动,可以仿照STM32的标准外设库对IMX6U的GPIO进行一个二次的封装,其实就是对GPIO的寄存器的封装。以上一个博客的按键蜂鸣器程序为例,在这个程序的基础上创建一个bsp_gpio文件夹,在这个文件夹中存放我们要封装的GPIO驱动程序。将这两个文件包含到程序中,将原程序中操作GPIO寄存器的地方使用bsp_gpio文件中的函数进行替换。

2024-10-15 19:15:47 350

原创 I.MX6uLL裸机开发:按键输入LED蜂鸣器实验

将寄存器IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER1 bit[3:0]设置为101复用成GPIO5_IO01。按键初始化将寄存器IOMUXC_SW_MUX_CTL_PAD_UART1_CTS_B位bit[3:0]设置为0101即复用位GPIO1_IO18。设置蜂鸣器电气属性,将寄存器IOMUXC_SNVS_SW_PAD_CTL_PAD_SNVS_TAMPER1的bit[16:0]设置为0x10B0。需要按键输入,所以bit[5:3]需要设置为000,剩余位倒不是很重要。

2024-10-15 15:08:50 1808

空空如也

空空如也

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

TA关注的人

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