- 博客(26)
- 收藏
- 关注
原创 基于System-Verilog点亮LED灯
SystemVerilog是一种硬件描述和验证语言(HDVL),它基于IEEE1364-2001 Verilog硬件描述语言(HDL),并对其进行了扩展,包括扩充了C语言数据类型、结构、压缩和非压缩数组、 接口、断言等等,这些都使得SystemVerilog在一个更高的抽象层次上提高了设计建模的能力。SystemVerilog由Accellera开发,它主要定位在芯片的实现和验证流程上,并为系统级的设计流程提供了强大的连接能力。
2024-06-15 21:11:48 1283 1
原创 红外超声波测距
HC-SR04超声波测距模块提供2cm~400cm的测距功能,精度达3mm。以下图片截取自深圳市捷深科技有限公司的《HC-SR04超声波测距模块说明书》(1)RS232是串口协议在电气层面的实现,RS-232标准接口定义了电压范围,规定逻辑“1”的电平为-5V~-15 V,逻辑“0”的电平为+5 V~+15V;(2)Soc的串口引脚一般是3.3V或者5V的电压,所以Soc的串口引脚要使用RS232必须添加TTL电平转RS232电平的转换芯片;
2024-06-14 21:06:27 666
原创 HLS入门实验
高层次综合(High-level Synthesis)简称HLS,指的是将高层次语言描述的逻辑结构,自动转换成低抽象级语言描述的电路模型的过程。所谓的高层次语言,包括C、C++、SystemC等,通常有着较高的抽象度,并且往往不具有时钟或时序的概念。
2024-06-12 15:39:42 1084
原创 基于FPGA的VGA协议实现
VGA接口最主要的几根线:VGA其实就是相当于一块芯片,跟单片机驱动IC一样,满足一定的时序,便能驱动起来。VGA的扫描其实很简单,大致轨迹如下所示:每扫描完一行,从新开始下一行;每扫完一场,重新开始下一场。以下是行扫描,场扫描HS,VS时序图VS时序如下所示:可见时序的循环,可被划分为a,b,c,d4个时期。这四个时期定义如下:A~B:场消隐期 即同步,相当于还原扫描坐标吧B~C:场消隐后肩 相当于准备开始扫描吧C~D:场显示期 扫描中,数据有效区域。
2024-05-26 21:55:06 1195
原创 ROS机器人小车建模仿真与SLAM
点击 file 的 save as 保存模型文件,地图绘制好后,保存为 .world 地图文件(文件后缀名一定要是 .world),将 .world 文件复制到 ~/catkin_ws/src/world 文件夹内,地图环境就搭建好了。打开你的ros工作目录,在src下创建一个功能包,在这个功能包下创建config和launch目录,config存放刚才的标定结果yaml文件,launch目录存放launch文件,来运行节点。X表示左右移动,Y表示上下,Size表示远近,Skew表示倾斜。
2024-05-06 23:59:29 1197
原创 ROS通信编程与视频实验
pkg-config --cflags --libs opencv:这部分是使用 pkg-config 工具来获取 OpenCV 的编译选项(cflags)和链接选项(libs)。该命令用于编译名为test1.cpp 的 C++ 源代码文件,生成可执行文件 test1。pkg-config 是一个 Linux 下用来返回已安装包的编译选项和链接选项的工具。在CMakeLists.txt添加编译选项。在CMakeLists.txt添加编译选项。设置CMakeLists.txt文件。
2024-03-14 18:34:26 1909 1
原创 ros环境配置及简单实验
导入清华镜像源,弹出警告同样的问题,其实说白了这是个警告,也只是警告而已。大家可以忽略,实在不想看到就使用nano或vi命令好啦~![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/75aa6fed13934db0881f6f6dfea4e4b1.png安装失败换成导入虚拟机。
2024-03-10 23:32:59 399 1
原创 基于中断/DMA的串口通信
直接存储器访问(Direct Memory Access),简称DMA。DMA是CPU一个用于数据从一个地址空间到另一地址空间“搬运”(拷贝)的组件,数据拷贝过程不需CPU干预,数据拷贝结束则通知CPU处理。因此,大量数据拷贝时,使用DMA可以释放CPU资源。DMA数据拷贝过程,典型的有:·内存—>内存,内存间拷贝·外设—>内存,如uart、spi、i2c等总线接收数据过程·内存—>外设,如uart、spi、i2c等总线发送数据过程因此:转移数据(尤其是转移大量数据)是可以不需要CPU参与。
2023-12-28 23:19:33 909 1
原创 Verilog学习及n位全加器的实现
此外,再写出一个4选1多路复用器(未提供模块模型),根据输入的sel[1:0]选择要输出的内容:输入D的值,在第一个D触发器之后的值,第二个或第三个D触发器之后的值。首先,通过逻辑抽象为真值表。通过分析全减器的逻辑功能后,我们容易得到全减器有三个输入端,即减数、被减数和高一级的借位,同时其有两个输出端,即当前位置的借位和当前位置的减法运算结果。通过分析全加器的逻辑功能后,我们容易得到全加器有三个输入端,即加数、被加数和低一级的进位,同时其有两个输出端,即当前位置的进位和当前位置的加法运算结果。
2023-12-22 12:46:33 1445
原创 基于HAL库的STM32简单串口通信
RS232电平与TTL电平是两种常见的串行通信电平标准,它们在电压级别和信号极性等方面有一些区别:电压级别:RS232电平通常使用正负12V的电压表示逻辑高低电平,其中正电压表示逻辑低,负电压表示逻辑高。而TTL电平通常使用0-5V的电压表示逻辑高低电平,其中0V表示逻辑低,5V表示逻辑高。信号极性:RS232电平是负逻辑极性,即逻辑高对应负电压,逻辑低对应正电压。而TTL电平是正逻辑极性,即逻辑高对应正电压,逻辑低对应0V。信号范围:RS232电平的信号范围更广,可以在几百米的距离内传输信号。
2023-12-14 23:49:33 1756 1
原创 STM32F103C8T6基于HAL库移植uC/OS
UCOSIII是一款实时操作系统(RTOS),全称为μC/OS-III(Micro C/OS-III)。它是由嵌入式系统开发公司Micrium开发的一款面向微控制器的操作系统。UCOSIII的设计目标是为嵌入式系统提供高效、可靠和可扩展的解决方案。UCOSIII包含了一系列的内核服务,包括任务管理、内存管理、时间管理、通信和同步机制等。它通过使用优先级调度算法,允许开发者将系统中的任务按照重要性和紧急程度进行优先级划分,并加以调度执行。
2023-11-28 20:24:48 991
原创 汉字点阵与OLED屏线及串口传输
学习理解汉字的机内码、区位码编码规则和字形数据存储格式。在Ubuntu下用C/C++(或python) 调用opencv库编程显示一张图片,并打开一个名为"logo.txt"的文本文件(其中只有一行文本文件,包括你自己的名字和学号),按照名字和学号去读取汉字24*24点阵字形字库(压缩包中的文件HZKf2424.hz)中对应字符的字形数据,将名字和学号叠加显示在此图片右下位置。在进行OLED的显示时,首先需要对字模进行取模,注意不要把字模取反,不然就无法得到正确的字样。
2023-11-26 23:30:13 901 1
原创 使用STM32实现IIC协议采集温湿度
软件 I2C(Inter-Integrated Circuit)是一种基于软件的模拟实现的 I2C 协议。I2C 是一种串行通信协议,用于在数字电路之间进行通信。它通常用于连接微控制器、传感器和其他外部设备。软件 I2C 通过软件实现 I2C 硬件接口的功能。在某些情况下,硬件 I2C 接口可能无法满足需求,或者系统中没有可用的硬件 I2C 接口,这时可以使用软件 I2C 来模拟实现。软件 I2C 的实现通常基于通用输入输出引脚(GPIO)。
2023-11-24 19:56:43 1082 1
原创 stm32cubeMX使用HAL库点亮LED流水灯
HAL 库(Hardware Abstraction Layer,硬件抽象层)和标准库(Standard Peripheral Library,标准外设库,又称为 SPL)都是 STM32 微控制器的固件库。它们的主要区别在于结构和抽象级别。1.HAL 库: HAL 库是 STMicroelectronics(ST)提供的较新的库。它提供了一套统一的 API,用于访问 STM32 系列微控制器的外设。HAL 库的目的是简化固件开发,让开发者更加关注应用层逻辑,而无需深入了解底层硬件。
2023-10-30 23:39:51 151 1
原创 使用STM32最小系统核心板(STM32F103C8T6)点亮LED流水灯
STM32标准外设库官方下载地址:https://www.st.com/zh/embedded-software/stm32-standard-peripheral-libraries.html使用的芯片是STM32F103C8T6,所以选择F1点击Get Latest,输入邮箱即可下载将标准库里面的文件移交到自己的工程项目中请参考博主:https://blog.csdn.net/weixin_43155866/article/details/88429527。
2023-10-17 22:43:14 2970
原创 嵌入式C程序经常会看见 register和volatile 关键字,请解释这两个变量修饰符的作用,并用C代码示例进行说明
关键字用于确保变量的值在程序流程之外被修改时能够正确地处理。在实际编程中,正确使用这两个关键字可以提高程序的可靠性和性能。关键字时,它们提供了特殊的变量修饰符,用于告诉编译器如何处理这些变量。,这是因为它可能会被外部设备或中断处理程序修改。关键字用于请求将变量存储在寄存器中以提高访问速度,而。时都从内存中读取最新的值,而不是使用之前缓存的值。当在嵌入式C程序中看到。下面是一个示例,展示了。下面是一个示例,展示了。关键字可以确保每次读取。
2023-10-09 22:41:14 84 1
原创 STM32F103系列芯片的地址映射和寄存器映射原理,GPIO端口的初始化设置的一般步骤
以STM32为例,操作硬件本质上就是操作寄存器。在存储器片上外设区域,四字节为一个单元,每个单元对应不同的功能。当我们控制这些单元时就可以驱动外设工作,我们可以找到每个单元的起始地址,然后通过C 语言指针的操作方式来访问这些单元。但若每次都是通过这种方式访问地址,不好记忆且易出错。这时我们可以根据每个单元功能的不同,以功能为名给这个内存单元取一个别名,这个别名实质上就是寄存器名字。给已分配好地址(通过存储器映射实现)的有特定功能的内存单元取别名的过程就叫寄存器映射。
2023-10-09 22:09:53 272 1
原创 使用MDK编译stm32简单程序
参考博主:https://blog.csdn.net/ssj925319/article/details/108919862。勾选下列选项(注意位置,可能不同版本的keil位置不同,选错后续程序会报错)(1)打开keil,点击project,给自己的项目命名。(2)选择STM32F103RB。(4)在项目添加main.c。(3)main函数代码。(5)点击红色放大镜。
2023-10-09 22:09:16 138 1
原创 Proteus仿真C51程序—Led流水灯
参考博主:https://blog.csdn.net/Matcha_ice_cream/article/details/118684582。双击双击 AT89C51 芯片,选择.hex后缀文件。//51单片机编程常用的头文件。保存后命名为main.c。(2)编写main文件。(3)生成.hex文件。
2023-10-08 22:01:07 121 1
原创 基于ubuntustm32的C程序内存分配问题
参考:https://blog.csdn.net/qq_43279579/article/details/110308101图解在C语言中的内存分配由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。它与数据结构中的堆不同,分配方式类似于链表。全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量、未初始化的静态变量在相邻的另一块区域。
2023-10-07 20:20:34 50 1
原创 gcc生成静态库.a和动态库.so
gcc编译:gcc -c sub1.c sub2.c。(1).创建一个目录week3。以lib作为前缀.a文件。执行hello文件出错。创建动态库指令gcc。
2023-10-07 16:54:22 71 1
原创 Ubuntu系统下练习使用gcc与vim编写c语言程序
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档(一)在ubuntu系统下编写c语言程序(二)在windows系统下编写c语言程序(三)Makefile方式编程主程序。
2023-09-15 20:12:57 157
原创 JavaScript & TypeScrupt学习总结
var 变量名;(1) typeof()是JS语言提供的一个函数,它可以返回参数的类型(2) JS语言中的注释写法与java一致。
2023-06-29 02:22:13 160
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人