草庐IT

STM32及GD32 - 可移植软件模拟I2C驱动实现(支持时钟延展,400KHz快速模式,宏接口注册驱动)

STM平台及GD平台-软件模拟I2C驱动实现一、需知二、背景三、代码实现3.1延时函数3.2时钟延展3.3枚举及结构体定义3.4对外接口四、使用示例4.1GD32F303RET6核心板4.1.1移植4.1.2使用4.1.3资源占用4.1.4通信波形4.2STM32F103C8T6核心板4.2.1使用4.2.2资源占用4.2.3通信波形五、驱动获取方式5.1百度网盘5.2GitHub(推荐)六、勘误6.1读取数据第一个bit的时钟延时不足够(已修复)一、需知本文不赘述I2C通信的协议栈和原理,默认阅读本文的读者已经知晓并会使用I2C通信本文的驱动以MCU为主机,且总线上只具有一个主机的场景进行实

GD32 单片机 硬件I2C死锁解决方法

死锁的复现方式在I2C恢复函数下个断点(检测到I2C多次超时之后,应该能跳转到I2C恢复函数)使用镊子,将SCL与SDA短接,很快就能看到程序停到恢复函数的断点上,此时再执行恢复函数,看能否正常走出(可在回复函数中写个死循环,只有I2C正常才跳出,检测I2C正常的办法,可以读从设备的ID)voidHAL_I2C_MspInit(I2C_HandleTypeDef*i2cHandle){GPIO_InitTypeDefGPIO_InitStruct={0};if(i2cHandle->Instance==I2C1){/*USERCODEBEGINI2C1_MspInit0*//*USERCODE

gd32 exmc 连接 mcu 8080TFT 驱动(8pin/16pin)ST7789,40帧每秒240*320;

#include"gd32e50x.h"#if  0 //RS~A23 16根数据线#defineBANK0_LCD_D    ((uint32_t)0x61000000)  //LCDdataaddress,RS~A2316线 2^23*2=0x1000000 #defineBANK0_LCD_C    ((uint32_t)0x60000000)  //LCDregisteraddressAlternate2:EXMC_NE0=PD7~LCD_CS#defineLCD_WR_DATA(value)   ((*(__IOuint16_t*)(BANK0_LCD_D))=((uint16_t)

计算机视觉中的图像压缩:从JPEG到Deep Image Compression

1.背景介绍计算机视觉技术的发展与图像压缩技术紧密相连。图像压缩技术是计算机视觉系统中的一个重要环节,它可以减少存储和传输的开销,提高系统性能。在过去的几十年里,我们已经看到了许多图像压缩算法的发展,如JPEG、JPEG2000和WebP等。然而,随着深度学习技术的迅速发展,我们现在可以利用深度学习算法来进一步优化图像压缩。在这篇文章中,我们将讨论计算机视觉中的图像压缩技术,从经典的JPEG算法到最新的DeepImageCompression(DIC)算法。我们将探讨这些算法的核心概念、原理和实现细节,并讨论它们在实际应用中的优缺点。最后,我们将讨论未来的发展趋势和挑战。2.核心概念与联系2.

ios - 哪个是在 iOS 中解码 Jpeg 最快的库?

我正在编写一个图像管理应用程序。我想尽快打开jpeg及其缩略图。这样用户就可以欣赏他们的图像。在IOS中解码Jpeg的库是最快的?我曾经使用IJL解码1/8大小的图像,它在PC上非常快。iOS有没有类似IJL的库?非常感谢! 最佳答案 您可以编译使用libjpeg(http://www.ijg.org/)。要快速打开缩略图,请设置scale_num和scale_denom值:jpeg_decompress_struct*cinfo_;///.....cinfo_->scale_num=1;cinfo_->scale_denom=8;

iOS - 将 UIImage 保存为灰度 JPEG

在我的应用中,我转换和处理图像。从彩色到灰度,然后进行直方图均衡、过滤等操作。那部分工作正常。我的UIImage显示正确,我也将它们保存为jpeg文件并且它可以工作。唯一的问题是,虽然我的图像现在是灰度图像,但它们仍然保存为RGBjpeg。也就是说,每个像素的红色、绿色和蓝色值都相同,但它仍然浪费空间来保留重复的值,从而使文件大小超出应有的大小。所以当我在photoshop中打开图像文件时,它是黑白的,但是当我选中“Photoshop>图像>模式”时,它仍然显示“RGB”而不是“灰度”。有人知道如何告诉iOSUIImageJPEGRepresentation调用应该创建每个像素一个ch

GD32F103 硬件SPI通信

1.SPI的通信原理SPI既可以做主机也可以做从机。当做主机时。MOSI,SCK,CS都是作为输出。 而作为从机时。MOSI,SCK,CS都是作为输入。 所以SPI的硬件电路应该实现这样的功能。2.GD32/STM32的SPI框图 1.GD32框图如下图做主机的数据流向: 如下图做从机的数据流向:  2.STM32框图 通过一些寄存器的配置来控制电路。跟GD32的差不多。波特率配置越高,采样越快。SPI的速率越快。3.SPI的寄存器介绍 1.控制寄存器0(SPI_CTL0)  2.控制寄存器1(SPI_CTL1) 3. 状态寄存器(SPI_STAT)  4.数据寄存器(SPI_DATA) 4.

objective-c - 如何从头开始在 iOS 上创建 JPEG 图像

我正在尝试为我的iPad应用程序创建一个Objective-C类,它可以将powerpoint文件转换为jpeg文件。因此,我必须阅读pptx格式以查看文件的结构并从头开始创建图像,我可以说这个元素放在那里,这个元素放在那里,这个文本放在那里。但实际上我不知道该怎么做,如果最好的方法是使用iOS中已有的框架或其他库?感谢大家;)再见 最佳答案 对我来说,可视化元素的最快方法是OpenGLES。你可以使用移动GPU来可视化然后有CIImage用于管理图像。 关于objective-c-如何

单片机(STM32,GD32,NXP等)中BootLoader的严谨实现详解

Bootloader(引导加载程序)的主要任务是引导加载并运行应用程序,我们的软件升级逻辑也一般在BootLoader中实现。本文将详细介绍BootLoader在单片机中的实现,包括STM32、GD32、NXPKinetis等等的所有单片机,因为无论是什么样的芯片,它实现的逻辑都是一样的。注意,本篇文章主要是介绍实现一个严谨的BootLoader需要掌握的基本知识和需要考虑的细节,如果不注意一些细节,应用层的代码很可能会受到影响。对于Linux的BootLoader来说其实也是一样的,但它还需要初始化MMU、引导内核等等,这里我们不做过多的讨论。文章目录1基础知识1.1NORFlash和NAN

GD MCU各系列产品替代方法和产品推荐

一、产品替代关注点:芯片架构:不同的MCU可能采用不同的架构,例如AVR、ARM、PIC等。当替换MCU时,确保选择一个具有相似或兼容的架构,以便在代码移植过程中减少工作量。这样可以更容易地复用现有的代码和资源。寄存器地址:MCU的寄存器用于控制和配置各种硬件功能。不同的MCU可能具有不同的寄存器地址映射。因此,在替换MCU时,需要检查新MCU的寄存器手册,了解其寄存器地址是否与旧MCU相同或类似。如果地址不同,就需要对代码进行适当的修改。功能和规格:确保新MCU能够满足原始MCU的功能和技术要求。比较关键的参数包括处理器速度、内存容量、IO口数量和类型等。外设和接口:检查新MCU是否提供了与