CUBEMX中STM32的DAC没有java中输出表达式的值值,哪里出错了?(没有语法错误)

21ic官方微信-->
后使用快捷导航没有帐号?
ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU
请完成以下验证码
查看: 5757|回复: 1
【连载】STM32开发指南--第二十四章 DAC实验
&&已结帖(0)
主题帖子积分
高级技术员, 积分 614, 距离下一级还需 386 积分
高级技术员, 积分 614, 距离下一级还需 386 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
高级技术员, 积分 614, 距离下一级还需 386 积分
高级技术员, 积分 614, 距离下一级还需 386 积分
本帖最后由 正点原子 于
21:39 编辑
第二十四章 DAC实验 & && &&&上两章,我们介绍了STM32的ADC使用,本章我们将向大家介绍STM32的DAC功能。在本章中,我们将利用按键(或USMART)控制STM32内部DAC模块的通道1来输出电压,通过ADC1的通道1采集DAC的输出电压,在LCD模块上面显示ADC获取到的电压值以及DAC的设定输出电压值等信息。本章将分为如下几个部分:24.1 STM32 DAC简介24.2 硬件设计24.3 软件设计24.4 下载验证
24.1 STM32 DAC简介 & && &&&大容量的STM32F103具有内部DAC,战舰STM32选择的是STM32F103ZET6属于大容量产品,所以是带有DAC模块的。STM32的DAC模块(数字/模拟转换模块)是12位数字输入,电压输出型的DAC。DAC可以配置为8位或12位模式,也可以与DMA控制器配合使用。DAC工作在12位模式时,数据可以设置成左对齐或右对齐。DAC模块有2个输出通道,每个通道都有单独的转换器。在双DAC模式下,2个通道可以独立地进行转换,也可以同时进行转换并同步地更新2个通道的输出。DAC可以通过引脚输入参考电压VREF+以获得更精确的转换结果。STM32的DAC模块主要特点有:① 2个DAC转换器:每个转换器对应1个输出通道 ② 8位或者12位单调输出 ③ 12位模式下数据左对齐或者右对齐 ④ 同步更新功能 ⑤ 噪声波形生成 ⑥ 三角波形生成 ⑦ 双DAC通道同时或者分别转换⑧ 每个通道都有DMA功能 单个DAC通道的框图如图24.1.1所示:
图24.1.1 DAC通道模块框图 图中VDDA和VSSA为DAC模块模拟部分的供电,而Vref+则是DAC模块的参考电压。DAC_OUTx就是DAC的输出通道了(对应PA4或者PA5引脚)。从图24.1.1可以看出,DAC输出是受DORx寄存器直接控制的,但是我们不能直接往DORx寄存器写入数据,而是通过DHRx间接的传给DORx寄存器,实现对DAC输出的控制。前面我们提到,STM32的DAC支持8/12位模式,8位模式的时候是固定的右对齐的,而12位模式又可以设置左对齐/右对齐。单DAC通道x,总共有3种情况:①& &&&8位数据右对齐:用户将数据写入DAC_DHR8Rx[7:0]位(实际是存入DHRx[11:4]位)。②& &&&12位数据左对齐:用户将数据写入DAC_DHR12Lx[15:4]位(实际是存入DHRx[11:0]位)。③& &&&12位数据右对齐:用户将数据写入DAC_DHR12Rx[11:0]位(实际是存入DHRx[11:0]位)。我们本章使用的就是单DAC通道1,采用12位右对齐格式,所以采用第③种情况。如果没有选中硬件触发(寄存器DAC_CR1的TENx位置’0’),存入寄存器DAC_DHRx的数据会在一个APB1时钟周期后自动传至寄存器DAC_DORx。如果选中硬件触发(寄存器DAC_CR1的TENx位置’1’),数据传输在触发发生以后3个APB1时钟周期后完成。 一旦数据从DAC_DHRx寄存器装入DAC_DORx寄存器,在经过时间之后,输出即有效,这段时间的长短依电源电压和模拟输出负载的不同会有所变化。我们可以从STM32F103ZET6的数据手册查到的典型值为3us,最大是4us。所以DAC的转换速度最快是250K左右。本章我们将不使用硬件触发(TEN=0),其转换的时间框图如图24.1.2所示:
图24.1.2 TEN=0时DAC模块转换时间框图当DAC的参考电压为Vref+的时候,DAC的输出电压是线性的从0~Vref+,12位模式下DAC输出电压与Vref+以及DORx的计算公式如下:DACx输出电压=Vref*(DORx/4095)接下来,我们介绍一下要实现DAC的通道1输出,需要用到的一些寄存器。首先是DAC控制寄存器DAC_CR,该寄存器的各位描述如图24.1.3所示:
图24.1.3 寄存器DAC_CR各位描述 & && & DAC_CR的低16位用于控制通道1,而高16位用于控制通道2,我们这里仅列出比较重要的最低8位的详细描述,如图24.1.4所示:
图24.1.4 寄存器DAC_CR低八位详细描述& && & 首先,我们来看DAC通道1使能位(EN1),该位用来控制DAC通道1使能的,本章我们就是用的DAC通道1,所以该位设置为1。& && & 再看关闭DAC通道1输出缓存控制位(BOFF1),这里STM32的DAC输出缓存做的有些不好,如果使能的话,虽然输出能力强一点,但是输出没法到0,这是个很严重的问题。所以本章我们不使用输出缓存。即设置该位为1。& && & DAC通道1触发使能位(TEN1),该位用来控制是否使用触发,里我们不使用触发,所以设置该位为0。& && & DAC通道1触发选择位(TSEL1[2:0]),这里我们没用到外部触发,所以设置这几个位为0就行了。& && & DAC通道1噪声/三角波生成使能位(WAVE1[1:0]),这里我们同样没用到波形发生器,故也设置为0即可。& && & DAC通道1屏蔽/复制选择器(MAMP[3:0]),这些位仅在使用了波形发生器的时候有用,本章没有用到波形发生器,故设置为0就可以了。& && & 最后是DAC通道1 DMA使能位(DMAEN1),本章我们没有用到DMA功能,故还是设置为0。& && & 通道2的情况和通道1一模一样,这里就不不细说了。在DAC_CR设置好之后,DAC就可以正常工作了,我们仅需要再设置DAC的数据保持寄存器的值,就可以在DAC输出通道得到你想要的电压了(对应IO口设置为模拟输入)。本章,我们用的是DAC通道1的12位右对齐数据保持寄存器:DAC_DHR12R1,该寄存器各位描述如图24.1.5所示:
图24.1.5 寄存器DAC_DHR12R1各位描述 & && & 该寄存器用来设置DAC输出,通过写入12位数据到该寄存器,就可以在DAC输出通道1(PA4)得到我们所要的结果。& && & 通过以上介绍,我们了解了STM32实现DAC输出的相关设置,本章我们将使用DAC模块的通道1来输出模拟电压,其详细设置步骤如下: 1)开启PA口时钟,设置PA4为模拟输入。STM32F103ZET6的DAC通道1是接在PA4上的,所以,我们先要使能PORTA的时钟,然后设置PA4为模拟输入(虽然是输入,但是STM32内部会连接在DAC模拟输出上)。2)使能DAC1时钟。同其他外设一样,要想使用,必须先开启相应的时钟。STM32的DAC模块时钟是由APB1提供的,所以我们先要在APB1ENR寄存器里面设置DAC模块的时钟使能。 3)设置DAC的工作模式。该部分设置全部通过DAC_CR设置实现,包括:DAC通道1使能、DAC通道1输出缓存关闭、不使用触发、不使用波形发生器等设置。& &4)设置DAC的输出值。通过前面3个步骤的设置,DAC就可以开始工作了,我们使用12位右对齐数据格式,所以我们通过设置DHR12R1,就可以在DAC输出引脚(PA4)得到不同的电压值了。最后,再提醒一下大家,本例程,我们使用的是3.3V的参考电压,即Vref+连接VDDA。通过以上几个步骤的设置,我们就能正常的使用STM32的DAC通道1来输出不同的模拟电压了。24.2 硬件设计 本章用到的硬件资源有:1)&&指示灯DS02)&&WK_UP和KEY1按键3)&&串口4)&&TFTLCD模块5)&&ADC6)&&DAC 本章,我们使用DAC通道1输出模拟电压,然后通过ADC1的通道1对该输出电压进行读取,并显示在LCD模块上面,DAC的输出电压,我们通过按键(或USMART)进行设置。我们需要用到ADC采集DAC的输出电压,所以需要在硬件上把他们短接起来。ADC和DAC的连接原理图如图24.2.1所示:
图24.2.1 ADC、DAC与STM32连接原理图 & && & P14是多功能端口,我们只需要通过跳线帽短接P14的ADC和DAC,就可以开始做本章实验了。如图24.2.2所示:
图24.2.2 硬件连接示意图
24.3 软件设计 找到上一章的工程,首先在HARDWARE文件夹下新建一个DAC的文件夹。然后打开USER文件夹下的工程,新建一个dac.c的文件和dac.h的头文件,保存在DAC文件夹下,并将DAC文件夹加入头文件包含路径。打开dac.c,输入如下代码:#include &dac.h&//DAC通道1输出初始化 void Dac1_Init(void){& && & RCC-&APB2ENR|=1&&2;& & //使能PORTA时钟& && && &&&& && & RCC-&APB1ENR|=1&&29;& &//使能DAC时钟& && && && && & GPIOA-&CRL&=0XFFF0FFFF; & && & GPIOA-&CRL|=0X;//PA4 模拟输入& && && && & DAC-&CR|=1&&0;&&//使能DAC1& && & DAC-&CR|=1&&1;&&//DAC1输出缓存不使能 BOFF1=1& && & DAC-&CR|=0&&2;&&//不使用触发功能 TEN1=0& && & DAC-&CR|=0&&3;&&//DAC TIM6 TRGO,不过要TEN1=1才行& && & DAC-&CR|=0&&6;&&//不使用波形发生& && & DAC-&CR|=0&&8;&&//屏蔽、幅值设置& && & DAC-&CR|=0&&12;& && & //DAC1 DMA不使能& & & && & DAC-&DHR12R1=0;}//设置通道1输出电压//vol:0~3300,代表0~3.3Vvoid Dac1_Set_Vol(u16 vol){& && & float temp=& && & temp/=1000;& && & temp=temp*;& && & DAC-&DHR12R1=}此部分代码就2个函数,Dac1_Init函数用于初始化DAC通道1。这里基本上是按我们上面的步骤来初始化的,经过这个初始化之后,我们就可以正常使用DAC通道1了。第二个函数Dac1_Set_Vol,用于设置DAC通道1的输出电压,通过USMART调用该函数,就可以随意设置DAC通道1的输出电压了。 保存dac.c代码,并将该代码加入HARDWARE组下。接下来在dac.h文件里面输入如下代码:#ifndef __DAC_H#define __DAC_H&&#include &sys.h&& && && &void Dac1_Init(void);& && && &&&//DAC通道1初始化& && && & void Dac1_Set_Vol(u16 vol); //设置通道1输出电压#endif该部分代码很简单,这里我们就不多说了。接下来我们在test.c里面,修改main函数如下:int main(void){& &&&& && & u16& && && && &u8 t=0;& & & && & u16 dacval=0;& && & u8& && &Stm32_Clock_Init(9);& & //系统时钟设置& && & uart_init(72,9600);& && &//串口初始化为9600& && & delay_init(72);& && && && && && &//延时初始化 & && & LED_Init();& && && && && &&&//初始化与LED连接的硬件接口& && &LCD_Init();& && && && && && &//初始化LCD& && & usmart_dev.init(72);& && &//初始化USMART& && &&&& && & KEY_Init();& && && && && && &//按键初始化& && && && &&&& && &Adc_Init();& && && && && && & //ADC初始化& && & Dac1_Init();& && && && && & //DAC通道1初始化& && & & && & POINT_COLOR=RED;//设置字体为红色 & && & LCD_ShowString(60,50,200,16,16,&WarShip STM32&);& & & && & LCD_ShowString(60,70,200,16,16,&DAC TEST&);& &&&& && & LCD_ShowString(60,90,200,16,16,&ATOM@ALIENTEK&);& && & LCD_ShowString(60,110,200,16,16,&&);& && & & && & LCD_ShowString(60,130,200,16,16,&WKUP:+&&KEY1:-&);& &&&& && & //显示提示信息& && && && && && && && && && && && && && && && && && && && && && && && && && && && && & POINT_COLOR=BLUE;//设置字体为蓝色& && & LCD_ShowString(60,150,200,16,16,&DAC VAL:&);& && && & & && & LCD_ShowString(60,170,200,16,16,&DAC VOL:0.000V&);& && && && & & && & LCD_ShowString(60,190,200,16,16,&ADC VOL:0.000V&);& && && &&&& && & DAC-&DHR12R1=//初始值为0& && && && && && && && && && & while(1)& && & {
& && && && &&&......//省略部分代码& && && && && && && &&&delay_ms(10);
& && & }}此部分代码,我们先对需要用到的模块进行初始化,然后显示一些提示信息,本章我们通过WK_UP和KEY1(也就是上下键)来实现对DAC输出的幅值控制。按下WK_UP增加,按KEY1减小。同时在LCD上面显示DHR12R1寄存器的值、DAC设计输出电压以及ADC采集到的DAC输出电压。本章,我们还可以利用USMART来设置DAC的输出电压值,故需要将Dac1_Set_Vol函数加入USMART控制,方法前面已经有详细的介绍了,大家这里自行添加,或者直接查看我们光盘的源码。 从main函数代码可以看出,按键设置输出电压的时候,每次都是以0.161V递增或递减的,而通过USMART调用Dac1_Set_Vol函数,则可以实现任意电平输出控制(当然得在DAC可控范围内)。24.4 下载验证 在代码编译成功之后,我们通过下载代码到ALIENTEK战舰STM32开发板上,可以看到LCD显示如图24.4.1所示:
图24.4.1 DAC实验测试图同时伴随DS0的不停闪烁,提示程序在运行。此时,我们通过按WK_UP按键,可以看到输出电压增大,按KEY1则变小。大家可以试试在USMART调用Dac1_Set_Vol函数,来设置DAC通道1的输出电压,如图24.4.2所示:
图24.4.2 通过usmart设置DAC通道1的电压输出
本帖子中包含更多资源
才可以下载或查看,没有帐号?
我的STM32开发板店铺:
我的技术论坛论坛:
主题帖子积分
资深技术员, 积分 444, 距离下一级还需 56 积分
资深技术员, 积分 444, 距离下一级还需 56 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
资深技术员, 积分 444, 距离下一级还需 56 积分
资深技术员, 积分 444, 距离下一级还需 56 积分
时间类勋章
技术奇才奖章
人才类勋章
涓涓之细流
发帖类勋章
技术新星奖章
人才类勋章
时间类勋章 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
matlab与stm32cubemx联合的嵌入式开发方法
下载积分:1000
内容提示:matlab与stm32cubemx联合的嵌入式开发方法
文档格式:PDF|
浏览次数:92|
上传日期: 12:19:24|
文档星级:
全文阅读已结束,如果下载本文需要使用
 1000 积分
下载此文档
该用户还上传了这些文档
matlab与stm32cubemx联合的嵌入式开发方法
官方公共微信查看: 685|回复: 4
STM32CubeMX不支持新版函数库的解决办法
原文发表于我的博客:
现在STM32Cube库更新速度还算挺快,但经常发现在STM32CubeMX里下载新版库使用,提示:
This Package version is not managed on this version of STM32CubeMX.
这是因为STM32CubeMX没有跟库函数同步更新,也不能提前知道库函数会变成什么样子,不敢直接支持。
要尝鲜的话,解决办法是有的:
先找到Repository所在目录,在Help菜单的Updater Setting里,可以自行设置:打开目录进入需要修改的Repository所在目录,如STM32Cube_FW_F1_V1.2.0,下面有个package.xml文件。1
&?xml version=&1.0& encoding=&ISO-8859-1& standalone=&no&?&
&Package DBVersion=&2.0&&
&PackDescription Release=&FW.F1.1.2.0&&
&&&Note&&Release=&ReleaseNotes.html&/&
&/PackDescription&
&/Package&
将库函数的版本改成STM32CubeMX可以支持的旧版,如将”FW.F1.1.2.0”改成”FW.F1.1.1.0”,就可以骗过STM32CubeMX了。目录名改不改倒不要紧。
这个办法有没有兼容性问题不详,也许这次没有,下次有也说不准,适合于喜欢尝鲜的人。注意看看Release Note库函数改动大不大,改动的地方对你的程序有没有影响。
方法不错,谢谢分享!
MX也更新一下& &
本帖最后由 iskywolf 于
12:26 编辑
MX也更新一下
STM32CubeMX更新频次少一些,就是为了解决STM32CubeMX版本更新滞后于STM32Cube库的问题。
我已经碰到过三次了。F4的1.6, 1.8,F1的1.2出来时,CubeMX都不支持。现在CubeMX已经更新了,但以后也还会碰到这种情况的。
这次4.10版的都支持了!还不错!
阿莫电子论坛, 原"中国电子开发网"当前位置: >
> STM32cubeMX软件安装与使用
STM32cubeMX软件安装与使用
时间:作者:华清远见
1、STM32cube简介
功能强大的STM32Cube新软件平台由设计工具、中间件和硬件抽象层组成,让客户能够集中精力创新,中国,日 &&横跨多重电子应用领域的全球领先的半导体供应商、全球领先的ARM Cortex-M内核微控制器厂商意法半导体(STMicroelectronics,简称ST)针对STM32微控制器推出一套免费的功能强大的设计工具及软件STM32CubeTM。新开发平台可简化客户的开发项目,缩短项目研发周期,并进一步强化STM32在电子设计人员心目中解决创新难题的首选微控制器的地位。
STM32CubeMX开发平台包括STM32CubeMX图形界面配置器及初始化C代码生成器和各种类型的嵌入式软件。配置初始化工具能够一步一步地引导用户完成微控制器配置,而嵌入式软件将为用户省去整合不同厂商软件的繁琐工作。嵌入式软件包括一个新的硬件抽象层(HAL,Hardware Abstraction Layer),用于简化代码在STM32产品之间的移植过程。通过在一个软件包内整合在STM32微控制器上开发应用所需的全部通用软件,该平台根除了评估每个软件之间关联性的复杂任务。STM32Cube提供数千个用例和一个软件更新功能,方便用户快捷高效的获取最新版本的软件。
STM32Cube 是一个全面的软件平台,包括了ST产品的每个系列。(如,STM32CubeF4 是针对STM32F4系列).平台包括了STM32Cube 硬件抽象层和一套的中间件组件(RTOS,USB,FS,TCP/IP, Graphics,等等).
C代码项目产生,涵盖STM32初始化部分。兼容IAR, KEIL和GCC编译器。
1、STM32cubeMX的获取
关于STM32cubeMX软件我们是在ST公司官网获取的,具体的下载地址:
/web/en/web/catalog/tools/FM147/CL1794/SC961/SS1533/PF259242?icmp=259242_prom_ss1574_jun2014
在ST官网上的查找路径:
Home & Tools and Software & Software & MCU Software & STM32 MCUS Software & STM32 Software Development Tools & STM32CubeMX
STM32系列芯片固件库的获取:
/web/en/catalog/tools/FM147/CL1794/SC961
在ST官网上的查找路径:
Home & Tools and Software & Software & MCU Software & STM32 MCUs Software
2、STM32cubeMX的安装
在安装STM32cubeMX之前需要先安装Java SDK开发工具包,没有Java SDK的支持STM32cubeMX就无法正常工作,我们这里安装的是JavaSetup8u51.exe,下面看一下具体的的安装步骤:
首先双击我们的Java SDK的安装文件:
如果想改变工具包的安装路径,就需要将下面的选项勾选上:
然后点击安装,开始Java SDK的安装,大约两分钟的时间:
根据需要修改目标文件夹的路径,最好就安装到STM32cubeMX的安装文件夹中,然后点击下一步,即可完成Java SDK的安装。
如果出现检测到版本过期点击以后提醒就ok:
下面开始安装STM32cubeMX:
首先从官网上获取到STM32cubeMX软件安装包,解压:
双击该安装程序:
点击Next,进行下一步操作:
勾选图中对应选项,点击Next进行下一步操作:
选择对应的安装目录,需要注意的是安装目录中尽量不含中文,然后点击Next进行下一步操作:
等待安装完成,点击Next进行下一步操作:
点击Done,完成STM32cubeMX的安装工作:
这样STM32cubeMX软件我们就安装好了,接下来我们需要为该图形化软件配置对应的固件库,固件库的下载地址在一节中已经提到了,具体的配置过程如下:
为了方便,首先将下载好的固件库放到STM32cubeMX软件的安装目录下:
解压后得到如下文件(注意,解压后的文件可能不是下图所示的文件,请在解压后的文件里面将下图文件夹提出来):
双击桌面的STM32cubeMX的快捷图标,在工具栏中点击Help-&Check for Updates
点击Check,完成之后,点击close
然后点击工具栏Help-&Install New Libraries
点击check:
我们可以看到,已经正确识别了的固件库,Firmware Package for Family STM32F4 1.7.0:
3、STM32cubeMX的使用
如何选择芯片:
双击STM32CubeMX快捷图标,点击New Project
参考下图,选择我们需要的芯片,我们这里选择的是,STM32F407,176脚封装的芯片:
这里选择好后,点击下面的OK即可:
我们可以看到弹出一个图形化的配置界面:
如何配置工程:
在配置工程之前我们先简单介绍一下,怎么使用这个软件,还有使用这个软件的时候需要注意的地方。
我们先看一下STM32cubeMX软件主界面的分布图:
然后我们可以一起创建一个简单的LED灯的工程,让大家能尽快的熟悉这个软件的使用:
我们想创建一个点LED灯的工程,在创建工程之前,需要先搞清楚,哪个引脚控制LED灯,这就需要在原理图中去看了,下面就是我们的LED灯的电路图:
由上图可以看到,如果我们需要点亮D6灯的话,需要操作的引脚是PF7,接下来,我们开始操作说了半天还没用的这款神奇软件了。由于这款芯片的引脚比较多,要一个个去找引脚可能比较费劲,所以在下图提示的地方输入想操作的引脚,就会很快找到:
找到PF7引脚后,单击该引脚(不是右击),可以看到我们能对该引脚进行的操作有这么几个选项:
我们这里点灯,只需要将引脚设置为输出,给一个低电平即可,由上图可以看到有一个GPIO_Output选项,点击它,这样我们就将PF7引脚配置成输出模式了,是不是很方便呢,其实我们只做点灯程序的话工程已经配置好了,接下来需要自动生成源代码,在源代码中添加相应的逻辑语句即可:
可以看到点击生成源代码按钮后弹出一个对话框,需要我们输入工程名,指定工程的存放路径,以及我们使用的IDE(我们使用的是MDK-ARM V5,在第一章中已经安装过了),下面我们一一对这些进行配置:
配置完工程的一些属性后,我们还需要配置生成源代码时的一些细节,这些细节可以为我们的工程增色不少。如下图,点击Code Generator,在Generated files一栏中勾选第一项,这里勾选的目的是,在工程生成源代码的时候,会将每个外围设备分类处理,举个简单的例子,我们在某个工程中可能会使用到GPIO的操作,串口的操作,I2C的操作等等,如果我们勾选了这个选项,那么在工程文件中,就会将GPIO的相关操作放到一个GPIO.c的文件中,将串口的操作放到uart.c的文件中,将I2C的操作放到I2C.c的文件中,这样我们查看程序的时候就可以一目了然了。勾选完这个选项后,点击OK就可以生成源代码工程了:
点击OK后,会弹出一个对话框,我们点击Open Project 就可以打开生成的工程文件:
下面我们需要在main.c中加入一些逻辑代码,使LED灯实现闪烁的效果,但是我们要注意,使用STM32CubeMx软件生成的工程文件,添加代码时,必须要在固定的位置添加,如果在其它地方添加代码,再次重新生成工程后,我们添加的代码就消失了。不过在生成的工程文件中很容易会发现可以添加代码的字段标志,每个字段都是以USER CODE BEGIN开始,以USER CODE END结束,我们只需将代码添加到这个标志中间即可,如下图所示:
下面我们在主函数中,添加亮灯和灭灯的逻辑语句:
添加完程序后,保存编译,将程序下载到开发板,会看到如下现象,说明我们的工程创建成功。(程序的编译和下载工程请参考前一章的介绍):
学院最新动态拒绝访问 |
| 百度云加速
请打开cookies.
此网站 () 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(3a1fe4d-ua98).
重新安装浏览器,或使用别的浏览器}

我要回帖

更多关于 pr输出值 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信