A-47双麦阵列语音处理模块,以专业 DSP 芯片 + 深度优化算法为基础,实现90dB 回音消除 + 45dB 降噪的顶级声学性能,同时兼顾低功耗、宽温域、抗干扰、易集成四大工程需求。11 种标准化硬件方案、近中远三档程序、模拟数字双接口,让它既能满足消费电子的轻薄便携需求,也能支撑工业安防的高可靠要求。
发表于 05-03 00:00
•1130次阅读
近日,摩尔线程依托旗舰级AI训推一体智算卡MTT S5000与自研MUSA软件栈,基于SGLang 开源推理框架,成功完成DeepSeek-V4的完整运行验证。该成果表明,面向新一代MoE大模型,摩尔线程已构建起从硬件架构核心计算引擎承接、热点算子支持,再到端到端部署验证的系统化适配链路,验证了国产GPU平台对前沿大模型“框架级兼容、开箱即落地”的承载实力及工程化落地能力。 随着大模型架构持续演进,DeepSeek-V4等先进模型对底层精度能力、算子覆盖、编译优化、
发表于 05-02 09:01
•606次阅读
电动工具行业比拼成本,更比拼稳定量产能力。盲目缩减物料规格换低价,只会埋下批量售后隐患;选对高集成核心方案,才是长效降本最优解。
其利天下电动工具无刷驱动方案,以成熟KY32DS024为核心硬件底座,依托高集成架构简化全链路设计,实打实把综合BOM成本下降30%,同时守住动力、静音、防护、量产全维度标准,适配高低压全平台、全品类电动工具。想要控成本、保品质
发表于 05-01 14:00
•2654次阅读
T型槽铸铁平台是一种表面带有T型槽的铸铁平板,主要用于固定工件,是机械制造、装配、调试和维修工作中不可或缺的基础工艺设备。下面从材质、结构、精度、规格及使用注意事项等几个方面为你详细介绍。主要特点与用途特点是工作面上加工有若干条T型槽,可以配合T型螺栓、压板等附件,方便地固定和调整各种工件或设备。因此,它特别适用于需要频繁装夹和调整的场景,例如钳工装配、设备调试、机械维修和焊接作业等。作为精和确的基准平面,它也用于检查零件的尺寸精度或形位偏差。规格与精度分级T型槽铸铁平台的规格、精度和材质都有明确的标准。执行标准:主要遵循国家标准 GB/T 22095-2008 或机械行业标准 JB/T 7974-1999。精度等级:按国家标准分为 0级、1级、2级、3级 四个等级。其中,0级和1级精度比较高,多用于精和密检测;2级和3级则常用于装配、划线或铆焊作业。常见规格:常规规格范围很广,从较小的200mm×200mm到大型的3000mm×8000mm都有。更大尺寸的平台可以采用多块拼接的方式实现。不同规格和精度等级的平台,其平面度公差有具体标准,例如一块2000mm×3000mm的2级平台,平面度公差为0.074mm(74μm)。材质与制造工艺平台通常选用高强度铸铁(如HT200-300)作为材质,以保证其硬度和耐磨性,工作面硬度通常要求达到HB 170-240。为确保尺寸稳定、不易变形,优质的制造工艺会包含两次人工时效处理(如退火和振动时效),以彻和底消除铸造和机加工产生的内应力。其工作面多采用刮削工艺,并用涂色法进行检验,以确保高精度的平面度和接触点均匀性。如何选择合适的T型槽平台?选型时,可以重和点考虑以下几点:用途决定精度:明确是用于精和密检测,还是一般的装配、焊接。检测务必选择0级或1级,而装配焊接选择2级或3级即可满足要求且成本更低。载荷决定材质与结构:根据比较大工件重量来选择。对于重载或使用频繁的场景,建议选择强度更高的HT250或HT300材质,并注意平台的筋板厚度和结构是否足够强壮。工件大小决定平台规格:平台工作面的尺寸应大于工件底座的尺寸,以便于安放和固定。T型槽参数需适配:根据你使用的T型螺栓规格,选择匹配的槽宽。T型槽的开口尺寸通常在12mm至60mm之间。使用与维护注意事项安装与调整平台需安装在稳固的基础上,用地锚器或调整垫铁调至水平,并使载荷均匀分布,防止因支撑不当导致变形。规范使用使用时,工件应平稳放置,严禁超载。避免在平台上进行敲击作业,以免损伤工作面。同时,要避免工件与平台面发生剧烈摩擦或磕碰。日常维护使用后应及时清理T型槽内的铁屑和杂物,并涂抹防锈油。长期不用时,应在工作面涂覆防锈油并用油纸覆盖,存放于干燥环境。
发表于 05-01 13:32
试验铁地板是铸铁地板在测试和研发领域的专业叫法。和普通用于装配或焊接的铁地板相比,它的核心使命是:为高精度、高频率的试验设备提供一个绝和对稳定、可精和确重复的基准平台。
可以把它理解为一个融合了“高精度基准面”和“设备减震地基”双重功能的系统。它具备以下几个核心特征:
核心一:材质与结构——为吸收振动而生
试验平台比较大的敌和人就是“振动”,因为任何多余的晃动都会直接污染测试数据。
高性能材质:通常采用高强度铸铁 (如 HT200-300,高和端会用 QT600-3 球墨铸铁)。这类材料内部的石墨结构就像无数微小的减震器,天生具有高阻尼特性,能高和效吸收和耗散试验设备产生的振动能量。
双重热处理:所有高品质的试验铁地板在铸造后,都必和须经过两次人工时效处理(通常在600-700℃的高温炉中进行)。这个过程会彻和底消除铸件内部的应力,确保平台在长达数年的使用中不会发生丝毫变形,精度保持相当稳定。
核心二:精度标准——从“毫米”到“微米”的跃升
试验铁地板精度远高于普通工业地板,它的精度是保证试验数据可重复、可信赖的基础。
平面度:这是比较核心的指标。普通平台可能满足于1mm/m的误差,但试验铁地板通常要求达到 0级精度,即每平方米平面度误差不超过 0.05毫米(约一根头发丝的直径)。
刮研工艺:要达到如此高的平面度,必和须依靠传统的人工“刮研”手艺。工人们在平台表面反复涂抹色浆,用刮刀一剔除高点,比较终使表面布满均匀的接触斑点(每平米超过25个点)。
水平度:安装调试后,整个台面的水平度误差要求控制在 0.03mm/m 以内,确保设备运行不会产生倾斜偏差。
核心三:T型槽系统——灵活固定的关键
试验铁地板表面布满平行的 T型槽,这是它功能性的体现。
作用:你可以利用T型槽和配套的螺栓,快速、牢固地固定发动机、测功机、振动台等各种形状各异的试验设备,而无需在地面上打孔。
组成:一个完整的试验铁地板通常由平台本体、T型槽、盖板、地脚螺栓和专门的调平装置(如垫铁)组成。
试验铁地板的四种常见应用布局
热模拟实验室型:
主要应用场景:材料高温、高压试验。
特点说明:侧重耐热性和热稳定性,减少温度变化带来的变形。
单缸机实验台型:
主要应用场景:小型发动机或单体部件测试。
特点说明:平台尺寸相对较小,但精度要求高,便于快速拆装。
多缸机实验台型:
主要应用场景:大型多缸发动机、变速箱测试。
特点说明:平台面积大,承重能力相当强,通常设计有复杂的油路和排水系统。
汽车疲劳振动试验型:
主要应用场景:模拟车辆长期颠簸、振动环境。
特点说明:对抗振和抗共振要求相当高,常配备专业的螺旋钢和弹簧减震系统。
发表于 05-01 13:20
欧美AI靠X破圈,中国AI靠什么?
发表于 05-01 13:10
•4710次阅读
传统开发升级,Java+AI 融合开发精讲——构建下一代企业级智能应用的技术栈重塑
在人工智能加速渗透至各行各业的当下,Java 开发者正面临一个关键转折点:要么被动旁观 AI 能力的边缘化集成,要么主动将 AI 能力深度融入 Java 技术体系,成为具备“传统架构 + 智能增强”双重竞争力的融合型工程师。Java+AI 融合开发并非简单的 SDK 调用,而是一套从架构模式、数据流设计到部署运维的系统性能力升级。本文从技术实战视角,拆解 Java 生态拥抱 AI 能力的核心路径与工程要点。(搜星 课it。top)
一、融合架构范式:从“调用式集成”到“嵌入式智能”
传统 Java 应用引入 AI 能力有两条典型路径。初级做法是独立部署 AI 模型服务(Python 推理端),Java 业务层通过 HTTP/RPC 调用获取结果。这种方式开发快、解耦好,但延迟与稳定性受网络调用影响。进阶做法是嵌入式智能——将轻量化模型直接运行于 Java 进程内。这一方向的技术基础包括:ONNX Runtime 对跨格式模型的高性能推理、Deep Java Library 提供的 Java 原生模型加载与训练扩展、以及最新版本的 Spring AI 框架对多种模型接入的抽象封装。实战中,需要根据响应时延要求(嵌入适合毫秒级,远程接受百毫秒级)、模型大小(百 MB 内可考虑嵌入)和更新频率(高频更新适合远程服务)做出架构决策。真正具备竞争力的融合架构,往往采用混合模式——对推理延迟极度敏感且模型轻量的场景嵌入运行,对模型需频繁迭代或计算密集的场景走独立服务通道,两者通过统一抽象接口向业务层屏蔽差异。
二、Java 推理引擎选型与性能优化
将 AI 模型跑在 JVM 内,最大的技术挑战是性能。传统 Python 生态依靠原生 C++ 后端与高效内存管理获得推理速度,而 Java 需通过桥接技术逼近这一水平。目前生产级验证充分的三条技术线:一是 ONNX Runtime Java 绑定 ,支持加载主流框架导出的 ONNX 模型,利用内置的 CPU/GPU 执行提供跨平台高性能;二是 Deep Java Library (DJL) ,亚马逊开源的框架无关引擎,提供统一 API 管理 PyTorch、TensorFlow、MXNet 等后端,并内置了模型 Zoo 与内存复用策略;三是 Tribuo ,专注机器学习预测的解释与部署。优化层面需关注的要点包括:通过批量推理摊薄单次调用 JNI 开销、预分配张量缓冲区减少 GC 压力、针对 CPU 推理启用 OpenMP 线程绑定、针对 GPU 推理优化数据在主机与设备间的拷贝频次。经验数据表明,充分优化的 Java 推理与原生 Python 推理的性能差距可控制在 20% 以内,足以支撑绝大多数企业级场景。
三、数据流与特征管线:Java 生态的传统优势发挥
AI 应用的性能瓶颈往往不在模型推理,而在上游的数据准备与特征工程。这正是 Java 生态的传统强项。借助 Kafka、RabbitMQ 构建实时特征管道,利用 Spark、Flink 做大规模特征变换,依赖 Spring Cloud Data Flow 编排特征流水线——这些组件天然与 Java 服务共享运行时与开发体感。设计要点在于将特征计算与模型推理解耦:离线批次特征可由定时任务写入特征存储(如 Redis、Alluxio),实时在线特征则通过轻量级计算从原始请求中提取并缓存复用。此外,善用 Java 强大的对象池技术与堆外内存管理,可显著降低特征转化过程中的内存抖动。这一层设计妥善时,Java+AI 系统的数据吞吐能力与扩展性可超越许多纯 Python 方案,成为架构上的差异化优势。
四、模型版本管理与热加载:解决更新停机之痛
企业级应用中,模型需要随数据分布变化而频繁更新。若每次更新都需要重启 Java 服务,将导致停机窗口与运维复杂度飙升。成熟的融合方案需支持模型热加载能力:通过监听配置中心或对象存储的版本变更事件,运行时动态替换内存中的模型实例。技术实现上,通常使用持有当前模型引用的原子引用包装类,新模型加载验证通过后以原子操作替换引用;同时保留前版本作为回退候选,并设计优雅的流量切换(如按百分比灰度路由至新模型)。更进一步,可以构建模型版本与特征管线版本的关联矩阵,确保新旧模型与特征逻辑的兼容性。这套能力的实现,让 Java 应用具备了 ML Ops 生产级的模型迭代能力,是架构设计成熟度的重要标志。
五、提示工程与结构化输出:Java 代码的确定性优势
大语言模型集成是 Java+AI 的重要子领域。与传统机器学习输出数值或类别不同,大语言模型的自由文本输出给 Java 程序带来了解析问题。核心对策是利用模型的结构化输出能力(JSON Mode、Function Calling/Tool Use),并配合 Java 的类型系统进行强类型解析。例如,通过定义 Tool 的输入参数 Schema,要求模型以指定 JSON 格式返回,再使用 Jackson、Gson 反序列化为 POJO,借助编译期类型校验规避运行时解析异常。对于复杂业务逻辑,可以设计两阶段调用:第一阶段让模型对用户意图分类,第二阶段根据分类结果路由到专门的提示模板与输出约束。这种确定性优先的设计思路,将大模型的非确定性压缩在被限定的范围内,其余交由 Java 的类型安全体系保障,是实现稳健融合的关键理念。
六、工程化落地考量:链路追踪、可观测性与失败策略
AI 能力引入增加了系统的复杂性与不确定性。生产环境必须建立专用的可观测性体系:每个推理请求应携带唯一追踪 ID,贯穿业务层调用、特征提取、模型推理、后处理全链路;记录模型输入特征摘要、推理耗时、输出置信度与原始预测值;对于大语言模型,还应记录 Token 消耗与 Prompt 指纹。对于推理失败(模型服务超时、结果异常、校验不通过),必须设计降级与重试策略,且策略需与业务场景匹配——推荐场景可返回默认结果,金融风控场景则更需要显式拒绝。此外,建立模型输出的运行时校验层,检测业务规则违例、特征合理性越界等情况,并可通过飞轮机制将异常样本记录用于模型迭代。这些工程细节常被忽视,却直接决定了系统从“能用”到“稳定可用”的关键跨越。
总结:Java 依然是最好的 AI 应用载体之一
AI 不等于 Python,Java 在企业级规模、并发模型、类型安全、生态完备性上的优势,与 AI 能力融合后将释放巨大潜力。传统 Java 开发者大可不必恐慌转型,而是应主动将 AI 作为能力增强点,扩展自身技术半径。掌握上述六大实战维度:架构范式选择、推理引擎优化、特征管线构建、模型热加载、大模型整合、工程可观测性,便是完成了从“传统 CRUD 开发者”到“智能应用架构师”的升级。这一转变,不仅是技术栈的丰富,更是问题解决能力维度的升维。在 AI 重构软件开发的浪潮中,Java + AI 的融合深度,将成为区分核心工程师与普通开发者的分水岭。
发表于 05-01 11:29
LCD1602液晶屏是一款较为传统的显示屏,由于采用并行方式传送数据十分占用引脚资源,为此可通过转接板将其改造为IIC接口的使用方式,其外观及电路见图1和图2所示。
图1 器件外观
图2 器件外观
为驱动该显示屏,它与开发板的连接关系为:
LCD1602_SCL-----P407
LCD1602_SDA----P408
实现该液晶屏显示驱动的程序为:
void IIC_Write_Byte(uint8_t date)
{
uint8_t i,temp;
temp=date;
IIC_OUTPUT_MODE_SET();
for(i=0;i<8;i++)
{
SCL_Clr();
if(temp & 0x80)
{
SDA_Set();
}
else
{
SDA_Clr();
}
temp=temp<<1;
delay_us();
delay_us();
SCL_Set();
delay_us();
}
SCL_Clr();
delay_us();
SDA_Set();
delay_us();
}
void IIC_Write_Comm_LCD(uint8_t comm)
{
uint8_t data_h = comm & 0xf0;
uint8_t data_l = (comm & 0x0f) << 4;
IIC_Write_Byte(0x00+data_h);
IIC_Ack();
IIC_Write_Byte(0x04+data_h);
IIC_Ack();
IIC_Write_Byte(0x00+data_h);
IIC_Ack();
delay(5);
IIC_Write_Byte(0x00+data_l);
IIC_Ack();
IIC_Write_Byte(0x04+data_l);
IIC_Ack();
IIC_Write_Byte(0x00+data_l);
IIC_Ack();
delay(5);
}
void IIC_Write_Date_LCD(uint8_t date)
{
uint8_t data_h = date & 0xf0;
uint8_t data_l = (date & 0x0f) << 4;
IIC_Write_Byte(0x01+data_h);
IIC_Ack();
IIC_Write_Byte(0x05+data_h);
IIC_Ack();
IIC_Write_Byte(0x01+data_h);
IIC_Ack();
delay(5);
IIC_Write_Byte(0x01+data_l);
IIC_Ack();
IIC_Write_Byte(0x05+data_l);
IIC_Ack();
IIC_Write_Byte(0x01+data_l);
IIC_Ack();
delay(5);
}
液晶屏的初始化函数为:
void LCD1602_Init()
{
uint8_t i = 0;
R_BSP_SoftwareDelay(20, BSP_DELAY_UNITS_MICROSECONDS);
IIC_Start();
IIC_Write_Byte(ADDR);
IIC_Ack();
IIC_Write_Comm_LCD(0x02); //设置四线发送数据
IIC_Write_Comm_LCD(0x28); //设置显示模式
IIC_Write_Comm_LCD(0x08); //显示关闭
IIC_Write_Comm_LCD(0x0c); //设置光标开关
IIC_Write_Comm_LCD(0x06); //设置光标移动
IIC_Write_Comm_LCD(0x01); //清屏
for(i=0;i<String_len1;i++)
{
IIC_Write_Date_LCD(lcd_show1[i]);
}
IIC_Write_Comm_LCD(0xc0);
for(i=0;i<String_len2;i++)
{
IIC_Write_Date_LCD(lcd_show2[i]);
}
}
实现显示测试的主程序为:
void hal_entry(void)
{
IIC_OUTPUT_MODE_SET();
LCD1602_Init();
while(1);
}
经程序的编译和下载,其测试效果见图4所示。
图3 器件连接
图4 显示效果
发表于 05-01 10:17
RA-Eco-RA2L1-V2.0开发板是一种近于最小系统的开发板,因此其外设资源十分有限。为了实现LCD屏的显示驱动,这里选取的是一款LCD屏,其显示分辨率为128*160像素点。
为此,需在RASC的Stack中加入SPI,见图1所示。
图1 添加SPI
随后,按图2所示进行参数配置。
图2 配置参数
此外,还需提供其它控制引脚的配置,见图3所示。
图3 辅助引脚配置
在完成引脚配置后,点击“Generate Project Content”,即可生成Keil工程。
LCD屏的引脚连接关系为:
CS ----P407
REST----P408
DC---P409
BL ---VCC
SDI ----P213
SCK ----P100
在生成Keil工程后,即可进行程序设计。
为便于高低电平的输出控制,所进行的语句定义有:
#define CS_SetR_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_07,BSP_IO_LEVEL_HIGH)
#define CS_ClrR_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_07,BSP_IO_LEVEL_LOW)
#define RST_Set R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_08,BSP_IO_LEVEL_HIGH)
#define RST_Clr R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_08,BSP_IO_LEVEL_LOW)
#define DC_SetR_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_09,BSP_IO_LEVEL_HIGH)
#define DC_ClrR_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_09,BSP_IO_LEVEL_LOW)
SPI的初始化函数为:
void SCI_SPI_Init(void)
{
fsp_err_t err = R_SCI_SPI_Open(&g_spi1_ctrl,&g_spi1_cfg);
assert(err == FSP_SUCCESS);
}
SPI的中断回调函数为:
void sci_spi_callback(spi_callback_args_t *arg)
{
if(arg->event == SPI_EVENT_TRANSFER_COMPLETE)
{
sci_spi_send_complete_flag = true;
}
}
SPI写字节数据的函数为:
void LCD_WriteData(uint8_t data)
{
CS_Clr;
DC_Set;
R_SCI_SPI_Write(&g_spi1_ctrl,(uint8_t*)&data,1,SPI_BIT_WIDTH_8_BITS);
while(!sci_spi_send_complete_flag);
sci_spi_send_complete_flag = false;
CS_Set;
}
SPI写16位数据的函数为:
void LCD_WriteData16(uint16_t data)
{
uint8_t buffer[2];
buffer[0] = (uint8_t)(data >> 8);
buffer[1] = (uint8_t)data;
CS_Clr;
DC_Set;
R_SCI_SPI_Write(&g_spi1_ctrl,(uint8_t*)&buffer[0],1,SPI_BIT_WIDTH_8_BITS);
while(!sci_spi_send_complete_flag);
sci_spi_send_complete_flag = false;
R_SCI_SPI_Write(&g_spi1_ctrl,(uint8_t*)&buffer[1],1,SPI_BIT_WIDTH_8_BITS);
while(!sci_spi_send_complete_flag);
sci_spi_send_complete_flag = false;
CS_Set;
}
SPI写字节指令的函数为:
void LCD_WriteCommond(uint8_t cmd)
{
CS_Clr;
DC_Clr;
R_SCI_SPI_Write(&g_spi1_ctrl,(uint8_t*)&cmd,1,SPI_BIT_WIDTH_8_BITS);
while(!sci_spi_send_complete_flag);
sci_spi_send_complete_flag = false;
CS_Set;
}
显示屏的初始化函数为:
void LCD_Init(void)
{
SCI_SPI_Init();
RST_Clr;
R_BSP_SoftwareDelay(20, BSP_DELAY_UNITS_MILLISECONDS);
RST_Set;
R_BSP_SoftwareDelay(20, BSP_DELAY_UNITS_MILLISECONDS);
LCD_WriteCommond(0x11);
R_BSP_SoftwareDelay(120, BSP_DELAY_UNITS_MILLISECONDS);
LCD_WriteCommond(0xB1);
LCD_WriteData(0x05);
LCD_WriteData(0x3C);
LCD_WriteData(0x3C);
LCD_WriteCommond(0xB2);
LCD_WriteData(0x05);
LCD_WriteData(0x3C);
LCD_WriteData(0x3C);
LCD_WriteCommond(0xB3);
LCD_WriteData(0x05);
LCD_WriteData(0x3C);
LCD_WriteData(0x3C);
LCD_WriteData(0x05);
LCD_WriteData(0x3C);
LCD_WriteData(0x3C);
LCD_WriteCommond(0xB4);
LCD_WriteData(0x03);
LCD_WriteCommond(0xC0);
LCD_WriteData(0x28);
LCD_WriteData(0x08);
LCD_WriteData(0x04);
LCD_WriteCommond(0xC1);
LCD_WriteData(0XC0);
LCD_WriteCommond(0xC2);
LCD_WriteData(0x0D);
LCD_WriteData(0x00);
LCD_WriteCommond(0xC3);
LCD_WriteData(0x8D);
LCD_WriteData(0x2A);
LCD_WriteCommond(0xC4);
LCD_WriteData(0x8D);
LCD_WriteData(0xEE);
LCD_WriteCommond(0xC5);
LCD_WriteData(0x1A);
LCD_WriteCommond(0x36);
LCD_WriteData(0x00);
LCD_WriteCommond(0xE0);
LCD_WriteData(0x04);
LCD_WriteData(0x22);
LCD_WriteData(0x07);
LCD_WriteData(0x0A);
LCD_WriteData(0x2E);
LCD_WriteData(0x30);
LCD_WriteData(0x25);
LCD_WriteData(0x2A);
LCD_WriteData(0x28);
LCD_WriteData(0x26);
LCD_WriteData(0x2E);
LCD_WriteData(0x3A);
LCD_WriteData(0x00);
LCD_WriteData(0x01);
LCD_WriteData(0x03);
LCD_WriteData(0x13);
LCD_WriteCommond(0xE1);
LCD_WriteData(0x04);
LCD_WriteData(0x16);
LCD_WriteData(0x06);
LCD_WriteData(0x0D);
LCD_WriteData(0x2D);
LCD_WriteData(0x26);
LCD_WriteData(0x23);
LCD_WriteData(0x27);
LCD_WriteData(0x27);
LCD_WriteData(0x25);
LCD_WriteData(0x2D);
LCD_WriteData(0x3B);
LCD_WriteData(0x00);
LCD_WriteData(0x01);
LCD_WriteData(0x04);
LCD_WriteData(0x13);
LCD_WriteCommond(0x3A);
LCD_WriteData(0x05);
LCD_WriteCommond(0x29);
}
以色彩填充显示屏的函数为:
void LCD_Fill(uint16_t xsta,uint16_t ysta,uint16_t xend,uint16_t yend,uint16_t color)
{
uint16_t i,j;
LCD_Address_Set(xsta,ysta,xend-1,yend-1);
for(i=ysta;i<yend;i++)
{
for(j=xsta;j<xend;j++)
{
LCD_WriteData16(color);
}
}
}
实现驱动测试的主程序为:
void hal_entry(void)
{
LCD_Init();
LCD_Fill(0,0,128,160,0XF800);
R_BSP_SoftwareDelay(1000, BSP_DELAY_UNITS_MILLISECONDS);
LCD_Fill(0,0,128,160,GREEN);
R_BSP_SoftwareDelay(1000, BSP_DELAY_UNITS_MILLISECONDS);
LCD_Fill(0,0,128,160,CYAN);
R_BSP_SoftwareDelay(1000, BSP_DELAY_UNITS_MILLISECONDS);
LCD_Fill(0,0,128,160,YELLOW);
R_BSP_SoftwareDelay(1000, BSP_DELAY_UNITS_MILLISECONDS);
while(1);
}
经程序的编译和下载,其测试效果如图3至图6所示,说明驱动控制有效。
图3 填充红色
图4填充黄色
在添加字库和显示函数的情况下,其显示效果如图5所示。
图5显示字符串
演示视频:
发表于 05-01 10:00
RA-Eco-RA2L1内置有12 位 ADC,并提供了多个检测通道。有了硬件的支持,要实现相应的功能,需由RASC进行配置,并生成KEIL工程代码,其步骤为:
添加ADC入栈,见图1所示。
图1 添加ADC
按图2来配置参数,按图3来选取采集通道。
图2 配置参数
图3 选取通道
然后点击“Generate Project Content”按钮,以生成项目工程。在生成项目框架后,以KEIL打开所生成的工程,并程序文件中添加相应的代码,完成后的内容为:
volatile uint8_t ADC0_Busy;
void adc0_callback(adc_callback_args_t * p_args)
{
FSP_PARAMETER_NOT_USED(p_args);
ADC0_Busy = 0;
}
void ADC0_Init(void)
{
err = R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg);
assert(FSP_SUCCESS == err);
err = R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg);
assert(FSP_SUCCESS == err);
ADC0_Busy = 0;
}
void ADC0_Convert(uint8_t channel)
{
FSP_PARAMETER_NOT_USED(channel);/* Enable scan triggering from ELC events. */
err = R_ADC_ScanStart(&g_adc0_ctrl);
assert(FSP_SUCCESS == err);
}
uint16_t ADC0_GetValue(uint8_t channel)
{
uint16_t ret;
err = R_ADC_Read(&g_adc0_ctrl, (adc_channel_t)channel, &ret);
assert(FSP_SUCCESS == err);
return ret;
}
在添加串口通讯的情况下,实现双通道A/D数据采集的主程序为:
void hal_entry(void)
{
uint16_t u;
uint32_t v;
err = R_SCI_UART_Open(&g_uart0_ctrl, &g_uart0_cfg);
assert(FSP_SUCCESS == err);
err = R_SCI_UART_Read(&g_uart0_ctrl, uart_rx_buffer, 3);
assert(FSP_SUCCESS == err);
printf(\"RA2L1 & ADC test:\\\\\\\\n\");
ADC0_Init();
while(1)
{
ADC0_Convert(ADC_CHANNEL_0);
u=ADC0_GetValue(ADC_CHANNEL_0);
v=u*3300/4095;
printf(\"u1= %d\\\\\\\\n\",u);
printf(\"v1= %d\\\\\\\\n\",v);
ADC0_Convert(ADC_CHANNEL_1);
u=ADC0_GetValue(ADC_CHANNEL_1);
v=u*3300/4095;
printf(\"u2= %d\\\\\\\\n\",u);
printf(\"v2= %d\\\\\\\\n\",v);
R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS);
}
}
经程序的编译和下载,其测试效果如图4至图7所示,说明程序设计准确。
图4 采集GND信号
图5 信号波动现象
图6 采集3.3V信号
在进行双通道采集的情况下,其测试效果如图7所示。
图7 采集结果
在连接光照与温度检测电路的情况下,可进行相应的检测及波形绘制,见图10和图11所示。
图8 光照与温度检测电路
图9 实物连接
图10 平稳状态波形
图11 遮挡光线的波形变化
发表于 05-01 09:47
探索MAX1471:315MHz/434MHz低功耗ASK/FSK超外差接收器 在无线通信领域,低功耗、高性能的接收器一直是工程师们追求的目标。MAX1471作为一款315MHz/434MHz低功耗、3V/5V ASK/FSK超外差接收器,凭借其独特的性能和丰富的功能,在众多应用场景中展现出了强大的竞争力。本文将深入剖析MAX1471的特点、工作原理及应用,为电子工程师们提供全面的参考。 文件下载: MAX1471.pdf 一、产品概述 MAX1471是一款低功耗、CMOS超外差式RF双通道接收器,无需重新配置设备或引入与改
发表于 05-01 09:05
•3057次阅读
其利天下针对行业痛点,推出全平台适配型电动工具无刷电机控制器,以KY32DS024高性能32位MCU为核心控制芯片,采用高集成一体化架构,搭配45V、250V、600V多档栅极驱动电压,真正实现高低压平台全覆盖、全品类电动工具通用适配,同时可延伸应用于吸尘器、风扇灯等高速电机场景,为厂家提供一站式无刷驱动解决方案。
发表于 05-01 09:00
•2940次阅读
A-59 工业级 AI 语音处理模组将神经网络降噪与自适应回声消除技术深度融合,在高音量、近间距、强噪声等极端声学条件下仍可保持清晰人声与流畅全双工体验,同时具备宽温、低功耗、小体积、多接口等工程化优势。该模组可显著提升语音识别率与通话质量,降低整机声学开发难度,缩短产品落地周期。
发表于 05-01 00:00
•3823次阅读
中国.北京,2026年4月26日 – 在2026北京国际汽车展览会期间,深圳方正微电子有限公司联合中国汽车芯片产业创新战略联盟,隆重举办“方正微电子车规主驱SiC MOSFET出货量超3000万颗里程碑暨G3平台新产品发布会”。 方正微电子总裁吴伟涛正式宣布:公司车规级主驱SiC MOSFET芯片累计出货量突破3000万颗,在新能源汽车车规主驱SiC MOSFET市场占有率超过10%。这一数字不仅是企业发展的一个重要里程碑,更标志着中国SiC企业在新能源车SiC应用领域中,国产SIC主驱
发表于 04-30 20:24
•3327次阅读
富士通于4月28日发布了FY2025财报。根据财报显示,调整后的FY2025合并营收为35,029亿日元,在业务结构持续调整的背景下保持总体稳定;调整后营业利润达到3,905亿日元,同比增长27.1%,实现连续第四年创历史新高,盈利能力与现金创造能力同步提升。 富士通主营业务中,服务解决方案(Service Solution)业务营收23,469亿日元,同比增长4.5%,调整后营业利润提升至3,614亿日元,利润率达到15.4%,继续成为增长引擎。 其中,Uvance业务增长显著,全年营收7,093亿日
发表于 04-30 18:38
•3975次阅读
评论