- 博客(629)
- 资源 (114)
- 收藏
- 关注
原创 触摸按键控制
这里需要注意的是,由图 11.3.1和图 11.3.2所可知,TOUT引脚并没有直接连接到FPGA引脚,而是连接到P4多功能端口上,而P4上的TPAD是和FPGA的引脚相连接的,因此,我们在做触摸按键的实验时,需要使用跳帽或者杜邦线将P4上的TPAD和TOUT短接在一起。第23行至35代码为一个经典的边沿检测电路,通过检测touch_key的上升沿来捕获按键按下的信号,一旦检测到按键按下,输出一个时钟周期的脉冲touch_en。电容部分指的是由电容极板,地,隔离区等组成触摸按键的电容环境。
2025-01-21 14:35:44
523
原创 LVGL v9官方文档
可能的值为:LV_ALIGN_DEFAULT、LV_ALIGN_TOP_LEFT/MID/RIGHT、LV_ALIGN_BOTTOM_LEFT/MID/RIGHT、LV_ALIGN_LEFT/RIGHT_MID、LV_ALIGN_CENTER。值 0、LV_OPA_0 或 LV_OPA_TRANSP 表示完全透明,255、LV_OPA_100 或 LV_OPA_COVER 表示完全覆盖,其他值或 LV_OPA_10、LV_OPA_20 等表示半透明。LV_OPA_COVER 是 否 否。
2024-12-11 17:10:21
982
原创 LVGL v9官方文档翻译
cpp:func:lv_display_set_buffers(display, buf1, buf2, buf_size_byte, mode) 大致相当于v8中的 lv_disp_draw_buf_init(&draw_buf_dsc, buf1, buf2, buf_size_px),但在v9中,缓冲区大小是以字节为单位设置的。如果容器的基础方向设置为LV_BASE_DIR_RTL,则在ROW布局中LV_FLEX_ALIGN_START和LV_FLEX_ALIGN_END的意义将会互换。
2024-12-11 16:57:15
384
原创 HC32F460 是否有 RTC?在电池供电方案中该如何使用?
[技术问答]HC32F460 是否有 RTC?在电池供电方案中该如何使用?_hc32f460 rtc-优快云博客华大HC32A460 系列介绍(三)_华大单片机内部温度传感器-优快云博客HC32F460PETB-LQFP100-华大半导体有限公司[【HC32F460开发板测评】(第二篇)HC32F460单片机的三种低功耗模式测评 - 国产芯片交流 -电子工程世界-论坛 -手机版
2024-02-27 17:22:11
526
原创 Verdi简介
如果你再仔细观察,还会发现如果要dump fsdb文件(Verdi支持的非标准波形文件),那么在旧版本的VCS编译的时候,还必须加上-P参数指定Verdi的PLI接口,为什么这么麻烦,因为这两个软件本来就不是一家公司设计的。除了源代码浏览器的标准功能,原理图,波形,状态机图和波形比较(用于比较FSDB格式的仿真结果),Verdi平台还包括使用时间流视图自动跟踪信号活动的高级功能,基于断言的调试,功耗感知调试以及事务和消息数据的调试和分析。下面的章节,让我们一起来探索Verdi的神秘世界吧。
2024-01-31 14:02:39
904
原创 Verilog 位拼接运算符 { }
位拼接运算符{ }用于将两个或多个信号拼接起来,表示一个整体的信号// 进位输出与和拼接在一起endmodule1234567因为如果a+b+cin产生了溢出位,正好被参与拼接中的cout所接收,就起到了简化表达式的作用// 设有寄存器store[7:0]12上面的代码通过拼接0和store的左侧7位实现了右移1位的操作// store 初值为1111_11111111_11110111_11110011_1111......1234。
2024-01-28 17:13:50
1594
1
原创 Verilog数组赋值
数组索引从0到3,所以可以通过以下方式访问每个元素:my_array[0], my_array[1], my_array[2], 和 my_array[3]。Verilog是一个使用数组的强大语言。my_2d_array[0][0], my_2d_array[0][1], my_2d_array[0][2], 和 my_2d_array[0][3]my_2d_array[1][0], my_2d_array[1][1], my_2d_array[1][2], 和 my_2d_array[1][3]
2024-01-28 14:08:50
7541
2
原创 verilog编程之乘法器的实现
先判断y的最低位是0还是1,如果是1,则需要把x加到部分积上,若为0,则需要把0加到部分积上(实际上加0的这个过程计算机并不执行,因为加0对部分积没有任何影响),x左移一位,之后再让y右移一位,若y为0,则循环结束,否则继续此循环过程。如果乘法还没开始(mult_begin == 0)或者乘法已经结束(mult_end == 1),则乘法有效信号(mult_valid)赋值0,也就是说此时没有进行有效的乘法。如果乘法有效(mult_valid == 1),则被乘数(multiplicand)左移一位。
2024-01-28 10:12:48
4037
原创 source insight 支持verilog 及使用技巧
Custom Languages - Source Insightsource insight 支持verilog 及使用技巧-优快云博客
2024-01-27 09:34:14
565
原创 cgroup实践-资源控制
1、Cgroup安装安装Cgroups需要libcap-devel和libcgroup两个相关的包2、Cgroup挂载配置3、常用的Cgroup相关命令和配置文件4、libcgroup Man Page简介。
2024-01-25 12:33:50
1256
原创 瑞萨 支持TrustZone®的R7FA4M2AC3CFM、R7FA4M2AD3CFM、R7FA4M2AD3CFP、R7FA4M2AC3CFP高性能32位微控制器
支持TrustZone®的R7FA4M2AC3CFM、R7FA4M2AD3CFM、R7FA4M2AD3CFP、R7FA4M2AC3CFP高性能32位微控制器。
2024-01-20 13:14:07
482
原创 5.3 Verilog 带参数例化
(2) 当然,利用 defparam 也可以改写模块在端口声明时声明的参数,利用带参数例化也可以改写模块实体中声明的参数。(4) 那如果一个模块中既有在模块在端口声明时声明的参数,又有在模块实体中声明的参数,那这两种参数还能同时改写么?可能的解释为,在编译器看来,如果有模块在端口声明时的参数,那么实体中的参数将视为 localparam 类型,使用 defparam 将不能改写模块实体中声明的参数。如果你用带参数模块例化的方法去改写参数 MASK 的值,编译不会报错,MASK 也将被成功改写!
2024-01-13 16:02:07
1415
原创 Quartus II 13.1的安装及使用
Quartus II 13.1的安装及使用_quartus13.1-优快云博客1.3 Verilog 环境搭建 | 菜鸟教程
2024-01-04 09:18:42
2388
原创 CAN 总线调试
在CAN通信过程中,发送方(发送节点)发送数据给接收方(接收节点)后,通常情况下,接收方会在成功接收数据后对发送方进行确认。值得注意的是,CAN总线上的通信波形是数字信号,高电平(被动,recessive)和低电平(主动,dominant)的变化代表着数据位的传输。如果它检测到主动状态的位,这意味着至少有一个节点已经确认了帧的接收。通信错误:CAN总线具有差错检测和处理机制,如果发送方的数据在传输过程中出现错误,接收方会发送错误帧来指示出现了通信错误,发送方可能因为自身问题而无法正确识别这个错误帧。
2023-12-18 11:16:25
628
原创 NXP LPC5516 Flexcomm & GD32A503 MFCOM
GitHub - nxp-mcuxpresso/mcux-sdk-examples: MCUXpresso SDK ExamplesMCUXpresso SDK_面向Kinetis、LPC和i.MX MCU的软件开发 | NXP 半导体https://www.nxpic.org.cn/document/list-926/
2023-12-12 16:35:54
371
原创 ARM MCU SWD离线调试器
0xFFFF)) // 大于1M的存储,实际中发现了:0xFFFF,而且一个可能的STM32F1假芯片也发现了这个问题!addressTmp9 += 0x400 ) // 清除程序区。#define SWD_AUTO_ADDRESS_ADD_VALUE 0x400 // 特别警告:STM32F0系列的地址自动增加大小为:1024个,而不是F1和F4的4096个!
2023-12-01 21:57:58
1385
原创 C语言实现ARM MCUJTAG离线调试器
该代码使用STM32F103C8T6作为调试器,通过JTAG接口连接目标设备。调试器通过GPIO控制JTAG接口的时钟和数据线,实现JTAG协议的相关功能。该代码实现了读取寄存器和读取内存的功能,可以用于基本的ARM MCU离线调试。需要注意的是,该代码仅供参考,实际应用需要根据具体的需求进行修改和优化。
2023-12-01 12:45:55
767
原创 C语言实现ARM MCU SWD离线调试器
SWD协议使用两根线(SWDIO和SWCLK)实现调试功能,相比于JTAG协议而言,SWD协议的引脚数量更少,因此更加适合于成本和空间有限的应用场景。需要注意的是,实现SWD离线调试器需要具备一定的硬件和软件开发能力,需要熟悉SWD协议的规范和相关开发工具的使用。总之,ARM SWD协议是一种简单、高效、低成本的调试协议,被广泛应用于ARM Cortex-M系列微控制器的调试和开发中。实现SWD协议:根据SWD协议的规范,实现SWD协议的相关功能,例如初始化SWD接口、读写寄存器、读写内存等。
2023-12-01 12:40:35
691
原创 pyOcd pyOCD-0.8.1a1
from pyocd.probe.aggregator import DebugProbeAggregatorfrom pyocd.board.board import Boardfrom pyocd.core.helpers import ConnectHelperfrom pyocd.core.target import Targetimport loggingfrom pyocd.flash.file_programmer import FileProgrammerfrom pyocd.co
2023-11-11 09:52:57
242
原创 JTAG 详解
简易JTAG线缆一端连接到PC的并口,另一端连接到目标板的JTAG接口,PC并口中的数据、I/O管脚通过一个74XX244单向驱动芯片与目 标板JTAG口的TMS、TCK、TDI、TDO、TRST信号线相连,然后用PC上的软件来模拟JTAG所遵守的IEEE 1149.1标准协议,从而访问、控制目标板上处理器的I/O管脚状态,也就能访问、控制挂接在处理器总线上的flash芯片的I/O管脚,实现将数据写 入flash芯片中的功能。如果TMS信号在下一个TCK上升沿处于低电平,则TAP进入Pause-DR状态。
2023-10-27 15:21:38
10848
原创 单片机内存管理
下面给大家分享一份源码:基于无操作系统的STM32单片机开发,功能强大,可申请到地址空间连续的不同大小的内存空间,且用户接口简单,使用方便。源码包含memory.h 和 memory.c 两个文件(嵌入式C/C++代码的“标配”),其源码中包含重要的注释。这里的代码比较简单,也是常规的写法,重点是要理解结构体成员的含义。源文件主要就是实现内存管理的函数,源码比较多,这里才分为三部分。代码中包含注释,注释描述的比较清楚,也比较容易理解。那你知道,在无操作系统的情况下,怎么管理内存吗?》讲述了内存管理的方法。
2023-09-14 11:32:20
381
原创 python将二进制数据的bin文件转换成16进制数组形式的C源文件
【代码】python将二进制数据的bin文件转换成16进制数组形式的C源文件。
2023-06-12 11:50:31
970
原创 verilog 基础教程
过程赋值只有在语句执行的时候,才会起作用。非阻塞赋值属于并行执行语句,即下一条语句的执行和当前语句的执行是同时进行的,它不会阻塞位于同一个语句块中后面语句的执行。过程性赋值是在 initial 或 always 语句块里的赋值,赋值对象是寄存器、整数、实数等类型。阻塞赋值属于顺序执行,即下一条语句执行前,当前语句一定会执行完毕。verilog 过程赋值包括 2 种语句:阻塞赋值与非阻塞赋值。前面的仿真中,initial 里面的赋值语句都是用的阻塞赋值。阻塞赋值语句使用等号 = 作为赋值符。
2023-06-02 15:40:56
200
原创 解析ELF(mcu parse flash flm file)可执行文件-C语言
【代码】解析ELF(mcu parse flash flm file)可执行文件-C语言。
2023-05-29 21:35:14
918
原创 cortex-m3软件断点/单步执行的实现机制
软件断点设置后,断点处的代码如果是存放在SRAM中,相应的一条指令(C语言中的一行代码可能对应多条处理器指令)会被调试器(debugger)替换成cortex-m3的BKPT指令,当程序运行到这一BKPT指令时,处理器会被停机(halt),用户可以用调试器做出相应的操作。典型情况是,要执行单步执行,处理器已经在debugger的控制下停机,这时处理器处于调试模式(debug state)。2)有被挂起的中断,且该中断的优先级允许它被执行,则会进入该中断对应的服务函数。
2023-05-28 13:02:11
984
原创 MCU离线下载器swd_host
* 本文件中对此函数的使用都是先 asserted=1 调用,延时后 asserted=0 调用,为了只调用一次所以只在第二次调用此函数时执行软件复位 */
2023-05-28 12:49:25
2076
原创 FlashAlgo 算法python实现
"""从ELF文件中解析出FlashDev.c文件中定义的FlashDevice结构体变量的值"""然后根据section的信息创建可在RAM中执行的算法程序的二进制blob '''''' 从ELF文件中依次解析出Flash信息和所需的symbols、sections,''' 用模板文件生成输出文件, 此类的所有数据都可以在模板中通过 'algo' 访问。''' ELF对象包装,以更方便访问 symbols 和 rom '''''' 若zi段丢失,创建一个空的 '''
2023-05-27 22:30:23
1816
原创 pyqt5-事件机制
在pyqt中,每个事件类型都被封装成相应的事件类,如鼠标事件为QMouseEvent,键盘事件为QKeyEvent等。不同的事件消息都能通过相应的方法监听。button() - 返回以下枚举值(只列了部分,详细内容参见http://doc.qt.io/qt-5/qt.html#MouseButton-enum),用以判断是哪个鼠标健触发了事件。事件的转发:当子控件中有事件消息时,会优先在子控件中实现处理该消息的方法,如果没有则会传递至其父控件处理,如果还没处理则会在传递,直到被处理或不可再被传递。
2023-05-21 10:15:08
1423
原创 VS2010 IAP ymodem c 实现
SOH | 序号 - 0x00 | 序号取反 - 0xff | 128字节数据,含文件名和文件大小字符串|CRC0 CRC1|FILE_FLAG_OVERLAPPED, /* 异步I/O */GENERIC_READ | GENERIC_WRITE, /* 允许读写*//* 设置好要发送数据包的前三个字符data[0],data[1],data[2] *//* 根据sizeBlk的大小设置数据区数据个数是取1024字节还是取128字节*//* soh表示数据包是128字节 */
2023-05-05 21:40:57
619
原创 单片机常见问题分析调试办法
如上图程序,本意是等待irq中断之后不再执行foo()函数,但被编译器优化之后,实际运行过程中flg可能被装入寄存器并且每次都判断寄存器内的值而不重新从ram里读取flg的值,导致即使irq中断发生foo()也一直运行,此处需要在flg的申明前加“volatile”关键字,强制每次都从ram里获取flg的值。此类问题通常需要结合map文件进行分析,通过map文件观察被篡改变量地址附近的数组,查看对该数组的写入操作是否存在如上图所示不安全的代码,将其修改为安全的代码。
2023-04-28 08:51:16
1772
原创 MCU短按长按的功能
首先读取按键的动作,再在switch case 里面匹配引脚的状态,case下用if判断按键动作或按下的时长,对状态、事件进行赋值。* 长按事件:按下时间大于 KEY_LONG_PRESS_TIME,释放后响应。KEY_Action_Release, // 按键动作,按下或释放。#define KEY_PRESSED_LEVEL 0 // 按键被按下时的电平。
2023-04-25 08:44:31
943
1
原创 状态机编程
get_press_key_idx函数,用于洗衣机程序来获取不同按键的按下事件,每次获取后,将按键事件清除(g_keyPressIdx设为无效值-1)本篇介绍的洗衣机的按键,仅需要检测按键单击即可,不需要双击与长按功能,因此,可使用之前文章介绍的最基础的按键状态机来为洗衣机状态机提供按键事件。之前介绍的按键状态机,只有一个按键,本篇需要用到4个按键(除去电源键,3个也可以),因此,需要对按键状态机稍加修改,实现按键状态机的复用。
2023-04-24 16:09:27
1135
原创 Zephyr单元测试框架:ztest的使用和介绍
这个目录下存放了一些初始化的Test Case,每次你调用twister时它会首先去执行构建这个目录下的所有Test Case,但是不记作你的测试项目里,只是它用于初始化调用,如果这个目录下的Case有任何错误都会使当前的测试失败,它就相当于初始化代码,你可以在这个目录下新建一个Test Case项目用于初始化测试,同时这个目录下的integration/测试Case是最一个简单的Demo示例。
2023-04-15 15:49:00
1578
原创 zephyr 信号量semaphores
可以有很多个线程同时等待一个相同的无效的信号量,当信号量变得有效时,最高优先级等待时间最长的线程将获取到信号量。理论上内核允许ISR中去获取一个信号量,但是不要在信号量无效时去等待,可以尝试获取,获取不到就返回。信号多用于同步,比如ISR和线程之间的同步,由ISR释放信号量,由线程等待信号量,这样ISR和线程就能同步执行。任意数量的信号量可以被定义,每个信号量通过他的地址被引用,所以只要你的内存够,那你就随便定义吧。一个是count,表示信号可以被获取(taken)的次数,当这个数是0,代表信号量无效。
2023-04-15 14:17:12
647
原创 Zephry DMA驱动使用教程
其次在开发过程中,即便你的DMA和CPU使用的是两个总线,那么也需要注意当DMA在对特定内存地址进行访问时,CPU不要对这个内存进行访问,否则会造成传输失败的情况,因为对于内存芯片来说,同一时间下一个内存单元只能被一个设备选取,当然你可以访问其它地址。source_burst_length uint32_t 多少字节为一块,如8字节为1块则每8字节为一个传输单位,分块传输,源块与目标块要一致。source_address uint64_t/uint32_t 传输块的起始源地址。
2023-04-13 10:20:37
526
RISC-V 体系结构原理与编程资料
2022-10-23
FatFs 文件系统在nor flash 移植
2022-09-03
CmBacktrace: ARM Cortex-M series MCU error tracking library
2022-08-28
en.stsw-stm32054_v3-6-0_en.stm32cubef1
2022-05-06
基于Ymodem协议串口升级程序的实现过程
2022-04-07
基于vs2019的lvgl模拟器lv_sim_visual_studio_sdl
2022-03-19
LvglFontTool_V0.3_littevgl
2021-09-26
LittleVGL模拟器环境a(CodeBlocks).rar
2021-09-18
darknet-master开源深度学习框架
2021-05-29
UGUI-master.7z
2021-04-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人