新唐cortex-m051学习之读写Flash

STM32C542入门实践:从零完成LED闪烁例程的完整指南 在嵌入式开发学习路径中,GPIO控制与开发板入门是每一位工程师必须跨越的基础门槛。无论是选择经典STM32系列还是新一代Cortex-M33内核芯片,掌握LED驱动原理和HAL库开发流程都至关重要。STM32CubeMX作为ST官方图形化配置工具,能够大幅降低外设初始化的复杂度,让开发者将精力聚焦于业务逻辑实现。本文围绕低成本开发板选型与最小系统验证展开,详细剖析LED限流电阻计算、推挽输出模式配置、SysTick延时机制以及SWD调试链路排查等核心知识点。通过一个看似简单的闪烁例程,可以系统验证电源、时钟 阅读详情
 

今天做的是读写Flash,因为最后从红外接收学习到的编码需要存入Flash中,所以读写Flash是一个很重要的模块!

然而新唐的例程中没有对数据Flash的读写,只有对LDROM 和 APROM的读写,其实差不了太多,为了不给以后的同仁多走弯路,这里特地写下笔者的经验,供大家参考!

这个板子的数据Flash大小是4KB,地址从0x0001f000 到 0x0001ffff。而笔者一开始是这样写的:

#define unsigned int uint32_t

uint32_t *flash;

flash = (uint32_t *)0x0001f000;

*flash = 0x55555555;

本打算往起始地址写0x55555555的值,结果执行的这里的时候,发生了硬件异常,进入了硬件异常处理函数里面去了!

这里要注意要往Flash里面写东西,是要讲究很高的安全性的,如果没有对相应的寄存器进行设置,那么一定会发生硬件异常!

那么怎么样才能正常的写入呢?记住一点,一定要对扇区进行擦除然后再写入,笔者一开始没有擦除直接写入,写不成功!

如下是笔者写的函数,作用就是往特定的地址里面写入值:

 void writetoFlash(uint32_t offset,uint32_t date)
 { /*要先擦除才能写*/
  int i;

    Un_Lock_Reg();       //往FLash写入的时候,是通过系统ISP写入,所以要先写入三个值,有例程的朋友们可以明白
    ISPCON |= ISPEN;  //使能ISP功能

 ISPCMD = PAGE_ERASE;     //选择为擦除模式
 for(i = 0; i < 4096/512; i++)              //4KB= 4096B,擦除的时候,系统规定页大小为512字节
 {
  ISPADR = 0x0001f000 + i * 512;
  ISPTRG |= ISPGO;       //触发执行ISP
    while((ISPTRG&ISPGO) == ISPGO);  //等待ISP 执行结束
 }

 ISPCMD = PROGRAM;                      //设置为编程模式
 ISPADR = DFBADR + (offset << 2);  //得到要写的地址,等同于0x0001f000 + 4*offset,offset 就是第几个值的意思
 ISPDAT = date;                                 //往数据寄存器中写入值

    ISPTRG |= ISPGO;                        //即将执行
    while((ISPTRG&ISPGO) == ISPGO);

 Un_Lock_Reg();
    ISPCON &= ~ISPEN;      //禁止ISP功能

}

然后是读出函数:

 uint32_t readfromFlash(uint32_t offset)
 {
  uint32_t data;

    Un_Lock_Reg();                //功能如上
    ISPCON |= ISPEN;         //使能ISP功能

    ISPCMD = READ;            //设定为读模式
 ISPADR = DFBADR + (offset << 2); //得到要读的地址
 data   = ISPDAT;               //得到数据

 Un_Lock_Reg();
    ISPCON &= ~ISPEN; //禁止ISP功能

 return data;
 }

 

总结一下,就是首先要使能ISP功能,然后设置模式,然后给出要操作的地址,然后操作数据,最后在禁止ISP功能,但是一定要先擦除才能写!


新唐N76E003ISP串口下载轻体验 新唐N76E003ISP串口下载轻体验ISP原理N76E003通过ISP烧录程序针对ISP的改进方向总结 ISP原理 ISP全称In System Programming,即在应用中编程。既然是在应用中编程,那么第一步就是你的单片机要有应用,这里的应用可以理解为单片机程序,这是一段独立的程序,在嵌入式单片机中我们一般叫它引导程序,即bootloader,bootloader在各类单片机中的定位基本一致,这是单片机上电首先进入执行的一段程序,可以是对单片机的一些配置,也可以是为ISP做准备。 STC单片机的b 阅读详情

相关推荐

新唐MS51FB9AE串口烧录实战:从引导程序到APROM的完整流程

本文详细解析了新唐MS51FB9AE单片机串口烧录(ISP)的完整流程。核心在于理解LDROM(引导程序)与APROM(应用程序)的分工,首先需通过NULINK将官方引导程序烧录至LDROM,随后即可通过UART接口和专用工具,将转换后的BIN文件烧录至APROM,实现无需调试器的程序更新。文章重点阐述了硬件接线、文件转换、工具操作步骤及常见问题排查,助你快速掌握这一量产与维护的必备技能。

weixin_29182481的博客 105

M051最新bspCmsis的初步使用心得,自制GPIO简化设置宏函数

近期因为开始真正的使用上新唐M051,开始领会到新唐M0尤其是M051的魅力所在.了解到官方的良苦用心. 体会了M0+51的独特魅力,没错,他就是为了搅局8位机市场而来,目标就是成为和8051媲美的单片机.他做到了.avr时代很多人, 觉得端口单独赋值不方便:举例- 两个液晶端口:                        LCD_CLK                        

梦在心中,路在脚下 2099

为什么写flash时,要先擦除。

总结:Flash需要先擦除后才能写入新的数据,这是由Flash存储单元的物理结构和写入机制决定的。Flash的每一个存储单元只能由1变0,无法由0变1。所以,需要先将目标存储段全部设为1(擦除),然后选择性地由1变0(写入),才能实现数据的修改或更新。那么之后,无论写入什么数据,都能由1变0,实现数据的写入。如果不先擦除,当需要由0变1的 bit 出现时,就无法完成写入操作,从而导致写入失败。这是因为,Flash存储器的存储单元是浮动栅极晶体管,每一个存储单元只能由1变0,无法由0变1。

qq_31885403的博客 6743

新唐M480系列单片机写入dataflash数据

配置新唐Nuvoton单片机的DataFlash,以及实现DataFlash的读写操作

weixin_47016440的博客 1939

3.STM32寄存器点灯实战:从命名规则到GPIO配置全解析

本文为STM32初学者提供了完整的"点亮LED"实战教程。首先详细解析了STM32芯片命名规则,包括产品系列、类型、内核型号等关键信息。然后通过PC2引脚控制LED的实例,讲解了GPIO的8种输入输出模式,重点演示了推挽输出的寄存器配置方法。教程分步骤说明:1)查看原理图确认LED连接引脚;2)使能GPIOC时钟;3)配置CRL寄存器设置输出模式和类型;4)通过ODR寄存器控制输出电平。最后总结了常见问题排查方法,如编译错误、LED不亮等情况的解决方案。本教程采用底层寄存器直接操作方式,

Dodger_code的博客 660

新唐N76E003单片机读写Flash例程

新唐N76E003单片机读写Flash例程

新唐ISP操作步骤

1,电脑上装上“NuMicro_ICP_Programming_Tool_v1.18.5320.zip”; 2,把目标板通过SWD口的NU-LINK连接到电脑的USB口上; 3,打开桌面的“NuMicro ICP Programming Tool”软件; 4,选择正确的CPU系列后点击“继续”; 5,点击软件中的“连线状态检测”下的“连接”看到详细的CPU型号; 6,在“载入文件”的“L

lj9010的专栏 8078

新塘32位MCU M051库函数参考手册

详细介绍了新塘官方库函数,使用库函数大大的方便了开发人员。

极海APM32F051系列:一款增强型工业级M0+ MCU的技术解析

极海半导体APM32F051系列MCU凭借与STM32F051的软硬件兼容性,成为国产替代方案的热门选择。该系列采用Arm Cortex-M0+内核,主频48MHz,内置32-64KB Flash和8KB SRAM,通过IEC60730认证,工作温度-40℃~105℃。特色功能包括电容触摸、HDMI CEC接口和5V容错I/O,适用于智能家居、工业控制等领域。开发工具链完善,支持Keil/IAR环境,引脚与STM32F051完全兼容,可实现无缝替代。

雅斯驰 420

SPIFlash W25Q64 新唐单片机程序

SPIFlash W25Q64 新唐单片机程序 可读,可写, 基本的操作

脑机接口最新发展动态报告 (2024-2025)

脑机接口动态

高山 4106

单片机爬坑记-02-资源紧缺

当下FreeRTOS得到了Keil、STM32Cube MX等开发环境的大力支持,很大程度上无需再考虑移植等底层问题,简单设置后在代码中直接调用即可。 不得不说,这是激动人心的,RTOS的各项特性所带来的方便给予我们极大的诱惑,总觉得只要用好RTOS,我们能把单片机玩出各种花样,再也不用考虑什么全局变量、轮循顺序、执行时长等恼人的问题,只要设置好优先级、信号量和任务参数,剩下的就可以安心于用代码...

Zarlinq的博客 313

无网络环境部署:手动获取并安装OneNote for Windows 10完整指南

本文提供了一份详尽的OneNote for Windows 10离线安装指南。针对无网络或内网隔离环境,详细介绍了如何从官方渠道获取正确的产品ID,利用第三方工具下载纯净的.appxbundle安装包,并解决系统兼容性与依赖框架问题。最后,通过PowerShell管理员命令完成安全部署,是IT管理员和高级用户在离线环境下部署UWP应用的实用参考。

loss4bartender的博客 496

STM32CubeIDE烧录C0芯片卡在50%?根因排查与五步修复指南

在嵌入式开发中,STM32烧录失败是工程师常遇的棘手问题,尤其是使用STM32CubeIDE调试C0系列芯片时,进度条卡在50%并报错“Flash Download failed”。这背后涉及SWD通信速率、OpenOCD目标描述、Flash编程时序、芯片读保护等多个技术环节。理解其原理:STM32烧录分为擦除和编程两步,任何一步的供电跌落、时序不稳或调试器配置不匹配,都会导致失败。掌握规范的排查流程,如调整SWD速率、切换硬件复位、补强供电、使用STM32CubeProgrammer交叉验证,能快速定位问

weixin_34195546的博客 453

拯救者R7000用户实测:用华为电脑管家11.0版搞定MatePad Pro多屏协同(附驱动与显卡避坑指南)

本文详细介绍了如何在非华为笔记本联想拯救者R7000上安装华为电脑管家11.0版,实现与MatePad Pro的多屏协同功能。从驱动优化到显卡配置,提供了全面的避坑指南和实用技巧,帮助用户解决连接失败等常见问题,提升跨设备生产力体验。

weixin_30788619的博客 398

【DaVinci Configurator专题】-2-将CAN 2.0或CANFD Matrix的Arxml/DBC文件导入到CFG

共9页 目录 1 打开DaVinci Configurator,导入Arxml文件 2 解决导入Arxml文件后可能会出现的一些错误 3 验证CFG的配置 4 根据CFG的配置生成代码 5 结尾 <--返回「实战篇」博文-总目录--> <--返回「Autosar从入门到精通-实战篇」专栏主页--> 关键词: Open the Input Files Assistant Complete update process Update ECU configurati

「汽车电子助手」的博客 6127

深入解析MC68SZ328:FLX68000指令集与内存映射实战指南

指令集架构(ISA)是处理器与软件沟通的基石,它定义了CPU能够理解和执行的基本操作集合。其设计原理直接决定了代码效率、硬件控制能力和编译器的友好度。在嵌入式系统领域,掌握指令集与内存映射是进行底层开发、驱动编写和系统优化的核心技术价值所在,尤其对于维护或升级基于经典架构的遗留系统至关重要。MC68SZ328微控制器搭载的FLX68000指令集,以其正交性设计和丰富的寻址模式著称,配合清晰规整的内存映射,为开发者提供了强大的硬件直接操控能力。本文聚焦于**FLX68000指令集**的寻址模式、核心指令分类以

weixin_38166557的博客 419

微信小程序报错:“errno“:600001,“errMsg“:“uploadFile:fail errcode:-105 cronet_error_code:-105 error_msg:net::

uploadFile:fail errcode:-105 cronet_error_code:-105 error_msg:net::ERR_NAME_NOT_RESOLVED,uniApp微信小程序使用uni.uploadFile出现报错,微信小程序如何解决wx.uploadFile报错,如何解决这个问题,微信小程序真机报错,微信小程序报错"errno":600001,"errMsg":"uploadFile:fail errcode:-105 cronet_error_code:-105 error_m

✅ 精选推荐文章 3830

新唐M0 内核 FLASH操作认识和总结

本文不对代码做详细解析。先说结论,和常见问题 结论 结论1:FLASH在操作的时候,需要先“擦除”。然后在“写入”。 结论2:擦除需要一整块擦除。不能只擦除某几个字节。 结论3:写入是可以按照字节这样写入的。但是“结论1”的存在。导致写入也整片写入。否则数据就会丢失。 结论4:写入可以写0 。不能写1.如果要写1.必须先“擦除”。 问题: 如果不按照如上结论来做。会怎样呢? 分析如下。 ============================ 验证1=============================

zhu378287521的博客 2250

1、Ka频段双极化低剖面卫通相控阵天线

设计了双馈口叠层十字缝隙耦合天线,采用“双线极化天线 +旋转馈电 + 移相控制”架构,采用双馈口的叠层十字缝隙耦合天线,并以 2 x2 阵列为主体,旋转排布实现二次圆极化,同时极化可切换,通过多层 PCB 工艺实现天线层、控制/电源层功分网终层、芯片层一体化集成,研制出 64 阵元的圆极化可切换发射天线,测试结果表明:天线工作 频段为 27.5 ~31 GHz,可实现60°扫描,法向轴比

qq_43416206的博客 4371

Android实战——白天黑夜模式设置

白天黑夜模式是一种动态的UI模式,根据当前时间或用户设置的偏好,在白天和黑夜之间进行切换。它通过调整应用程序的颜色、亮度和其他可视化元素来提供更加舒适和易读的用户界面。

小旭的专栏 5230

新唐N76E003单片机用APROM模拟EEPROM每次下载写入值复位为0XFF

因为我选择了全部擦除再下载的原因,如果选择只擦除要下载程序需要的空间就不会出现被复位了。其更改设置在

feifeiccode的博客 1355

锐捷 MPLS VPN 配置

ISP内部配置 , PE设备和CE设备之间的接口不开启 ( 只在物理接口上配置 , loopback 口不配置 )最后一步关闭 ipv4 单播 , 如果你发现路由奇奇怪怪的 , 可以尝试一下。both --> 同时配置 import export 值。绑定后接口会重置 , 且接口的路由会转到VRF路由表中。这里基本上绑定了 vrf 实例的接口都需要宣告进去。vpnv 4 通道是用来传递 mpls 路由的。先建立邻居管理,建立VPNV4通道。这里要做双向引入 , 才会有路由。export 导出值。

dekangzou的博客 1712

新唐 Nuvoton ML51PC 入门 点亮板载LED

官网地址: http://www.nuvoton.com.cn/board/numaker-ml51pc/ ML51PC 板载的是一片8位单片机,晶振24M。右边带的是 Un-Link2 Me,自带一片Flash 用来批量下载rom用的(还没看怎么用 ,对入门者来说,这东西就是个鸡肋) Keil开发环境需要下载BSP https://www.nuvoton.com/hq/resource-download.jsp?tp_GUID=SW0720181228172729 更多介绍跟软件看这里 htt

firseve的专栏 2010

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

新唐 M451系列APROM与LDROM间跳转

新堂Nuvoton M451系列单片机LDROM与APROM之间跳转。

imzhujun的专栏 2760

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: 新唐Cortex—M0学习红外发射
下一篇: 自学习式,智能万能空调遥控-----纠结了我一个多礼拜的问题
memoryjs
博客等级 码龄18年 240粉丝 113原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值