热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

F28335eCAP配置代码(自发自检)

程序的功能是:1,在EPWMA1口发出频率10K和占空比为0.5的方波2,在GPIO34口设置捕获功能,检测发出的方波

程序的功能是:

1,在 EPWMA1 口发出频率 10K 和 占空比为0.5 的方波

2,在GPIO34口设置捕获功能,检测发出的方波

3,freq 输出检测频率,duty输出检测占空比

main.c部分

#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h" // DSP2833x Examples Include Filevoid ChoseCap(void);
void EPwmSetup();
void SetCap1Mode(void);
void SetCap2Mode(void);Uint32 t1=0,t2=0,t3=0,t4=0,T1=0,T2=0,t5,t6,t7,t8,T3,T4,i,led=0,freq=0,duty=1,T1_temp=1,T2_temp=1;
interrupt void ISRCap1(void);
interrupt void ISRCap2(void);
void InitCapl();void main(void)
{InitSysCtrl();InitXintf16Gpio(); //zqDINT;InitPieCtrl();IER = 0x0000;IFR = 0x0000;InitPieVectTable();EALLOW; // This is needed to write to EALLOW protected registersPieVectTable. ECAP1_INT = &ISRCap1;// PieVectTable. ECAP2_INT = &ISRCap2;//PieVectTable.XINT13 = &cpu_timer1_isr;//PieVectTable.TINT2 = &cpu_timer2_isr;EDIS; // This is needed to disable write to EALLOW protected registers//EALLOW;GpioCtrlRegs.GPAMUX2.bit.GPIO26 = 0;GpioCtrlRegs.GPADIR.bit.GPIO26= 1;EDIS;GpioDataRegs.GPACLEAR.bit.GPIO26=1;InitCapl();EPwmSetup();IER |= M_INT4;//IER |= M_INT13;//IER |= M_INT14;// Enable TINT0 in the PIE: Group 4 interrupt1PieCtrlRegs.PIEIER4.bit.INTx1 = 1;// PieCtrlRegs.PIEIER4.bit.INTx2 = 1;EINT; // Enable Global interrupt INTMERTM; // Enable Global realtime interrupt DBGMi=0;for(; ;){}}interrupt void ISRCap1(void)
{// Acknowledge this interrupt to receive more interrupts from group 1PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;ECap1Regs.ECCLR.all=0xFFFF;//clare all flagled++;t1= ECap1Regs.CAP1;t2= ECap1Regs.CAP2;t3= ECap1Regs.CAP3;t4= ECap1Regs.CAP4;T1=t2-t1;T2=t4-t3;if(led>100){T1_temp=T1;T2_temp=T2*10;freq = (150000/T1_temp)*1000;duty = (T2_temp/T1_temp)*10;led=0;}}

EPWM.c 部分


#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h" // DSP2833x Examples Include File#if (CPU_FRQ_150MHZ)#define CPU_CLK 150e6
#endif
#if (CPU_FRQ_100MHZ)#define CPU_CLK 100e6
#endif
#define PWM_CLK 10e3 // If diff freq. desired, change freq here.
#define SP CPU_CLK/(2*PWM_CLK)
#define TBCTLVAL 0x200E // Up-down cnt, timebase = SYSCLKOUTvoid EPwmSetup()
{InitEPwm1Gpio();// InitEPwm();
// EPwm1Regs.TBSTS.all=0;EPwm1Regs.TBPHS.half.TBPHS=0; //所有相位清零EPwm1Regs.TBCTR=0; //时基计数器清零EPwm1Regs.TBPRD = 750;EPwm1Regs.CMPA.half.CMPA = 375;EPwm1Regs.CMPB = 300;EPwm1Regs.TBCTL.bit.CTRMODE = 2; //增计数EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; //禁止相位控制EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW; // 采用影子寄存器模式EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE; //关闭同步信号EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0x05;EPwm1Regs.TBCTL.bit.CLKDIV = 0x0;EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // CTR = 0 epwm A 置1EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR; // CTR = CMPA epwm A 置0EPwm1Regs.AQCTLB.bit.CBU = AQ_SET;EPwm1Regs.AQCTLB.bit.CBD = AQ_CLEAR;// EPwm1Regs.AQCTLB.all=0;
// EPwm1Regs.AQSFRC.all=0;
// EPwm1Regs.AQCSFRC.all=0;EPwm1Regs.DBCTL.all=0xb; // EPWMxB is invertedEPwm1Regs.DBRED=0;EPwm1Regs.DBFED=0;EPwm1Regs.TZSEL.all=0;EPwm1Regs.TZCTL.all=0;EPwm1Regs.TZEINT.all=0;EPwm1Regs.TZFLG.all=0;EPwm1Regs.TZCLR.all=0;EPwm1Regs.TZFRC.all=0;EPwm1Regs.ETSEL.all=0; // Interrupt when TBCTR = 0x0000EPwm1Regs.ETFLG.all=0;EPwm1Regs.ETCLR.all=0;EPwm1Regs.ETFRC.all=0;EPwm1Regs.PCCTL.all=0;}

 

 ECAP.C 部分

// TI File $Revision: /main/7 $
// Checkin $Date: September 20, 2007 13:30:31 $
//###########################################################################
//
// FILE: DSP2833x_Cap_Init.c
//
// TITLE: DSP2833x Device System Control Initialization & Support Functions.
//
// DESCRIPTION:
//
// Example initialization of system resources.
//
//###########################################################################
// $TI Release: DSP2833x Header Files V1.01 $
// $Release Date: September 26, 2007 $
//############################################################################include "DSP2833x_Device.h" // Headerfile Include File
#include "DSP2833x_Examples.h" // Examples Include File
void ChoseCap(void);
void InitECapGpio();
void SetCap1Mode(void);
void SetCap2Mode(void);
void InitCapl(void);// Functions that will be run from RAM need to be assigned to
// a different section. This section will then be mapped to a load and
// run address using the linker cmd file.#pragma CODE_SECTION(InitFlash, "ramfuncs");//---------------------------------------------------------------------------
// InitSysCtrl:
//---------------------------------------------------------------------------
// This function initializes the System Control registers to a known state.
// - Disables the watchdog
// - Set the PLLCR for proper SYSCLKOUT frequency
// - Set the pre-scaler for the high and low frequency peripheral clocks
// - Enable the clocks to the peripheralsvoid InitCapl(void)
{ChoseCap();InitECap1Gpio();
// InitECap2Gpio();SetCap1Mode();
// SetCap2Mode();
}
void ChoseCap(void)
{ SysCtrlRegs.PCLKCR1.bit.ECAP1ENCLK=1;//enable clock to Cap1//SysCtrlRegs.PCLKCR1.bit.ECAP2ENCLK=1;//SysCtrlRegs.PCLKCR1.bit.ECAP3ENCLK=1;//SysCtrlRegs.PCLKCR1.bit.ECAP4ENCLK=1;//SysCtrlRegs.PCLKCR1.bit.ECAP5ENCLK=1;//SysCtrlRegs.PCLKCR1.bit.ECAP6ENCLK=1;}
void InitECapGpio()
{InitECap1Gpio();
#if (DSP28_ECAP2)InitECap2Gpio();
#endif // endif DSP28_ECAP2
#if (DSP28_ECAP3)InitECap3Gpio();
#endif // endif DSP28_ECAP3
#if (DSP28_ECAP4)InitECap4Gpio();
#endif // endif DSP28_ECAP4
#if (DSP28_ECAP5)InitECap5Gpio();
#endif // endif DSP28_ECAP5
#if (DSP28_ECAP6)InitECap6Gpio();
#endif // endif DSP28_ECAP6
}void InitECap1Gpio(void)
{EALLOW;
/* Enable internal pull-up for the selected pins */
// Pull-ups can be enabled or disabled by the user.
// This will enable the pullups for the specified pins.
// Comment out other unwanted lines.// GpioCtrlRegs.GPAPUD.bit.GPIO5 = 0; // Enable pull-up on GPIO5 (CAP1)//GpioCtrlRegs.GPAPUD.bit.GPIO24 = 0; // Enable pull-up on GPIO24 (CAP1)GpioCtrlRegs.GPBPUD.bit.GPIO34 = 0; // Enable pull-up on GPIO34 (CAP1)// Inputs are synchronized to SYSCLKOUT by default.
// Comment out other unwanted lines.// GpioCtrlRegs.GPAQSEL1.bit.GPIO5 = 0; // Synch to SYSCLKOUT GPIO5 (CAP1)//GpioCtrlRegs.GPAQSEL2.bit.GPIO24 = 0; // Synch to SYSCLKOUT GPIO24 (CAP1)GpioCtrlRegs.GPBQSEL1.bit.GPIO34 = 0; // Synch to SYSCLKOUT GPIO34 (CAP1)/* Configure eCAP-1 pins using GPIO regs*/
// This specifies which of the possible GPIO pins will be eCAP1 functional pins.
// Comment out other unwanted lines.// GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 3; // Configure GPIO5 as CAP1// GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 1; // Configure GPIO24 as CAP1GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 1; // Configure GPIO24 as CAP1EDIS;
}#if DSP28_ECAP2
void InitECap2Gpio(void)
{EALLOW;
/* Enable internal pull-up for the selected pins */
// Pull-ups can be enabled or disabled by the user.
// This will enable the pullups for the specified pins.
// Comment out other unwanted lines.// GpioCtrlRegs.GPAPUD.bit.GPIO7 = 0; // Enable pull-up on GPIO7 (CAP2)GpioCtrlRegs.GPAPUD.bit.GPIO25 = 0; // Enable pull-up on GPIO25 (CAP2)
// GpioCtrlRegs.GPBPUD.bit.GPIO37 = 0; // Enable pull-up on GPIO37 (CAP2)// Inputs are synchronized to SYSCLKOUT by default.
// Comment out other unwanted lines.// GpioCtrlRegs.GPAQSEL1.bit.GPIO7 = 0; // Synch to SYSCLKOUT GPIO7 (CAP2)
GpioCtrlRegs.GPAQSEL2.bit.GPIO25 = 0; // Synch to SYSCLKOUT GPIO25 (CAP2)
// GpioCtrlRegs.GPBQSEL1.bit.GPIO37 = 0; // Synch to SYSCLKOUT GPIO37 (CAP2)/* Configure eCAP-2 pins using GPIO regs*/
// This specifies which of the possible GPIO pins will be eCAP2 functional pins.
// Comment out other unwanted lines.// GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 3; // Configure GPIO7 as CAP2GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 1; // Configure GPIO25 as CAP2
// GpioCtrlRegs.GPBMUX1.bit.GPIO37 = 3; // Configure GPIO37 as CAP2EDIS;
}
#endif // endif DSP28_ECAP2#if DSP28_ECAP3
void InitECap3Gpio(void)
{EALLOW;/* Enable internal pull-up for the selected pins */
// Pull-ups can be enabled or disabled by the user.
// This will enable the pullups for the specified pins.
// Comment out other unwanted lines.GpioCtrlRegs.GPAPUD.bit.GPIO9 = 0; // Enable pull-up on GPIO9 (CAP3)
// GpioCtrlRegs.GPAPUD.bit.GPIO26 = 0; // Enable pull-up on GPIO26 (CAP3)// Inputs are synchronized to SYSCLKOUT by default.
// Comment out other unwanted lines.GpioCtrlRegs.GPAQSEL1.bit.GPIO9 = 0; // Synch to SYSCLKOUT GPIO9 (CAP3)
// GpioCtrlRegs.GPAQSEL2.bit.GPIO26 = 0; // Synch to SYSCLKOUT GPIO26 (CAP3)/* Configure eCAP-3 pins using GPIO regs*/
// This specifies which of the possible GPIO pins will be eCAP3 functional pins.
// Comment out other unwanted lines.GpioCtrlRegs.GPAMUX1.bit.GPIO9 = 3; // Configure GPIO9 as CAP3
// GpioCtrlRegs.GPAMUX2.bit.GPIO26 = 1; // Configure GPIO26 as CAP3EDIS;
}
#endif // endif DSP28_ECAP3#if DSP28_ECAP4
void InitECap4Gpio(void)
{EALLOW;/* Enable internal pull-up for the selected pins */
// Pull-ups can be enabled or disabled by the user.
// This will enable the pullups for the specified pins.
// Comment out other unwanted lines.GpioCtrlRegs.GPAPUD.bit.GPIO11 = 0; // Enable pull-up on GPIO11 (CAP4)
// GpioCtrlRegs.GPAPUD.bit.GPIO27 = 0; // Enable pull-up on GPIO27 (CAP4)// Inputs are synchronized to SYSCLKOUT by default.
// Comment out other unwanted lines.GpioCtrlRegs.GPAQSEL1.bit.GPIO11 = 0; // Synch to SYSCLKOUT GPIO11 (CAP4)
// GpioCtrlRegs.GPAQSEL2.bit.GPIO27 = 0; // Synch to SYSCLKOUT GPIO27 (CAP4)/* Configure eCAP-4 pins using GPIO regs*/
// This specifies which of the possible GPIO pins will be eCAP4 functional pins.
// Comment out other unwanted lines.GpioCtrlRegs.GPAMUX1.bit.GPIO11 = 3; // Configure GPIO11 as CAP4
// GpioCtrlRegs.GPAMUX2.bit.GPIO27 = 1; // Configure GPIO27 as CAP4EDIS;
}
#endif // endif DSP28_ECAP4#if DSP28_ECAP5
void InitECap5Gpio(void)
{EALLOW;/* Enable internal pull-up for the selected pins */
// Pull-ups can be enabled or disabled by the user.
// This will enable the pullups for the specified pins.
// Comment out other unwanted lines.GpioCtrlRegs.GPAPUD.bit.GPIO3 = 0; // Enable pull-up on GPIO3 (CAP5)
// GpioCtrlRegs.GPBPUD.bit.GPIO48 = 0; // Enable pull-up on GPIO48 (CAP5)// Inputs are synchronized to SYSCLKOUT by default.
// Comment out other unwanted lines.GpioCtrlRegs.GPAQSEL1.bit.GPIO3 = 0; // Synch to SYSCLKOUT GPIO3 (CAP5)
// GpioCtrlRegs.GPBQSEL2.bit.GPIO48 = 0; // Synch to SYSCLKOUT GPIO48 (CAP5)/* Configure eCAP-5 pins using GPIO regs*/
// This specifies which of the possible GPIO pins will be eCAP5 functional pins.
// Comment out other unwanted lines.GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 2; // Configure GPIO3 as CAP5
// GpioCtrlRegs.GPBMUX2.bit.GPIO48 = 1; // Configure GPIO48 as CAP5EDIS;
}
#endif // endif DSP28_ECAP5#if DSP28_ECAP6
void InitECap6Gpio(void)
{EALLOW;/* Enable internal pull-up for the selected pins */
// Pull-ups can be enabled or disabled by the user.
// This will enable the pullups for the specified pins.
// Comment out other unwanted lines.GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0; // Enable pull-up on GPIO1 (CAP6)
// GpioCtrlRegs.GPBPUD.bit.GPIO49 = 0; // Enable pull-up on GPIO49 (CAP6)// Inputs are synchronized to SYSCLKOUT by default.
// Comment out other unwanted lines.GpioCtrlRegs.GPAQSEL1.bit.GPIO1 = 0; // Synch to SYSCLKOUT GPIO1 (CAP6)
// GpioCtrlRegs.GPBQSEL2.bit.GPIO49 = 0; // Synch to SYSCLKOUT GPIO49 (CAP6)/* Configure eCAP-5 pins using GPIO regs*/
// This specifies which of the possible GPIO pins will be eCAP6 functional pins.
// Comment out other unwanted lines.GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 2; // Configure GPIO1 as CAP6
// GpioCtrlRegs.GPBMUX2.bit.GPIO49 = 1; // Configure GPIO49 as CAP6EDIS;
}
#endif // endif DSP28_ECAP6
void SetCap1Mode(void)
{ECap1Regs.ECCTL1.bit.CAP1POL = EC_RISING;ECap1Regs.ECCTL1.bit.CAP2POL = EC_RISING;ECap1Regs.ECCTL1.bit.CAP3POL = EC_RISING;ECap1Regs.ECCTL1.bit.CAP4POL = EC_FALLING;ECap1Regs.ECCTL1.bit.CTRRST1 = EC_ABS_MODE;ECap1Regs.ECCTL1.bit.CTRRST2 = EC_ABS_MODE;ECap1Regs.ECCTL1.bit.CTRRST3 = EC_ABS_MODE;ECap1Regs.ECCTL1.bit.CTRRST4 = EC_ABS_MODE;ECap1Regs.ECCTL1.bit.CAPLDEN = EC_ENABLE;ECap1Regs.ECCTL1.bit.PRESCALE = EC_DIV1;ECap1Regs.ECCTL2.bit.CAP_APWM = EC_CAP_MODE;ECap1Regs.ECCTL2.bit.CONT_OnESHT= EC_CONTINUOUS;ECap1Regs.ECCTL2.bit.SYNCO_SEL = EC_SYNCO_DIS;ECap1Regs.ECCTL2.bit.SYNCI_EN = EC_DISABLE;ECap1Regs.ECEINT.all=0x0000;//stop all interruptECap1Regs.ECCLR.all=0xFFFF;//clare all flagECap1Regs.ECCTL2.bit.TSCTRSTOP = EC_RUN;// 启动ECap1Regs.ECEINT.bit.CEVT4=1;// Enable cevt4 interrupt
}void SetCap2Mode(void)
{ECap2Regs.ECCTL1.bit.CAP1POL = EC_FALLING;ECap2Regs.ECCTL1.bit.CAP2POL = EC_FALLING;ECap2Regs.ECCTL1.bit.CAP3POL = EC_FALLING;ECap2Regs.ECCTL1.bit.CAP4POL = EC_FALLING;ECap2Regs.ECCTL1.bit.CTRRST1 = EC_ABS_MODE;ECap2Regs.ECCTL1.bit.CTRRST2 = EC_ABS_MODE;ECap2Regs.ECCTL1.bit.CTRRST3 = EC_ABS_MODE;ECap2Regs.ECCTL1.bit.CTRRST4 = EC_ABS_MODE;ECap2Regs.ECCTL1.bit.CAPLDEN = EC_ENABLE;ECap2Regs.ECCTL1.bit.PRESCALE = EC_DIV1;ECap2Regs.ECCTL2.bit.CAP_APWM = EC_CAP_MODE;ECap2Regs.ECCTL2.bit.CONT_OnESHT= EC_CONTINUOUS;ECap2Regs.ECCTL2.bit.SYNCO_SEL = EC_SYNCO_DIS;ECap2Regs.ECCTL2.bit.SYNCI_EN = EC_DISABLE;ECap2Regs.ECEINT.all=0x0000;//stop all interruptECap2Regs.ECCLR.all=0xFFFF;//clare all flagECap2Regs.ECCTL2.bit.TSCTRSTOP = EC_RUN;// 启动ECap2Regs.ECEINT.bit.CEVT4=1;// Enable cevt4 interrupt
}
//===========================================================================
// End of file.
//===========================================================================

 


推荐阅读
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 网址:https:vue.docschina.orgv2guideforms.html表单input绑定基础用法可以通过使用v-model指令,在 ... [详细]
  • 嵌入式处理器的架构与内核发展历程
    本文主要介绍了嵌入式处理器的架构与内核发展历程,包括不同架构的指令集的变化,以及内核的流水线和结构。通过对ARM架构的分析,可以更好地理解嵌入式处理器的架构与内核的关系。 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • 在2022年,随着信息化时代的发展,手机市场上出现了越来越多的机型选择。如何挑选一部适合自己的手机成为了许多人的困扰。本文提供了一些配置及性价比较高的手机推荐,并总结了选择手机时需要考虑的因素,如性能、屏幕素质、拍照水平、充电续航、颜值质感等。不同人的需求不同,因此在预算范围内找到适合自己的手机才是最重要的。通过本文的指南和技巧,希望能够帮助读者节省选购手机的时间。 ... [详细]
author-avatar
吴尧丹_449
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有