查看: 8672|回复: 20

[分享] 【LPC54102寄存器开发指南】

[复制链接]
  • TA的每日心情
    开心
    2019-3-22 20:15
  • 签到天数: 21 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    23

    主题

    341

    帖子

    1

    高级会员

    Rank: 4

    积分
    909
    最后登录
    2019-4-7
    发表于 2016-11-10 20:58:42 | 显示全部楼层 |阅读模式
    本帖最后由 噬猎者 于 2016-11-20 20:38 编辑

    1.LPC54102概述:LPC54102主要特性和优势:
     Dual processor cores: ARM Cortex-M4 and ARM Cortex-M0+. The M0+ core runs at the same frequency as the M4 core. Both cores operate up to a maximum frequency of 100 MHz.
     ARM Cortex-M4F core (version r0p1):
     ARM Cortex-M4 processor, running at a frequency of up to 100 MHz.
     Floating Point Unit (FPU) and Memory Protection Unit (MPU).
     ARM Cortex-M4 built-in Nested Vectored Interrupt Controller (NVIC).
     Non-maskable Interrupt (NMI) input with a selection of sources.
     Serial Wire Debug with eight breakpoints and four watch points.
    Includes Serial Wire Output for enhanced debug capabilities.
     System tick timer.
     ARM Cortex-M0+ core (version r0p1):
     ARM Cortex-M0+ processor, running at a frequency of up to 100 MHz.
     ARM Cortex-M0+ built-in Nested Vectored Interrupt Controller (NVIC).
     Non-maskable Interrupt (NMI) input with a selection of sources.
     Serial Wire Debug with four breakpoints and two watch points.
     System tick timer.
     On-chip memory:
     Up to 512 KB on-chip flash program memory with flash accelerator and 256 byte page erase and write.
     104 KB SRAM for code and data use.
     ROM API support:
     Flash In-Application Programming (IAP) and In-System Programming (ISP).
     Power control API.
     Serial interfaces:
     Four USART interfaces with synchronous mode and 32 kHz mode for wake-up from Deep-sleep and Power-down modes. The USARTs include a FIFO buffer and share a fractional baud-rate generator.
     Two SPI interfaces, each with four slave selects and flexible data configuration.
    The SPIs include a FIFO buffer. The slave function is able to wake up the device from Deep-sleep and Power-down modes.
     Three I2C-bus interfaces supporting fast mode and Fast-mode Plus with data rates of up to 1Mbit/s and with multiple address recognition and monitor mode. Each I2C-bus interface also supports High Speed Mode (3.4 Mbit/s) as a slave. The slave function is able to wake up the device from Deep-sleep and Power-down modes.
     Digital peripherals:
     DMA controller with 22 channels and 20 programmable triggers, able to access all memories and DMA-capable peripherals.
     Up to 50 General-Purpose Input/Output (GPIO) pins. Most GPIOs have configurable pull-up/pull-down resistors, programmable open-drain mode, and input/output inverter.
     GPIO registers are located on the AHB for fast access. The DMA supports GPIO ports.
     Up to eight GPIOs can be selected as pin interrupts (PINT), triggered by rising,falling or both input edges.
     Two GPIO grouped interrupts (GINT) enable an interrupt based on a logical (AND/OR) combination of input states.
     CRC engine.
     Timers:
     Five 32-bit general purpose timers/counters, with up to 4 capture inputs and 4 compare outputs, PWM mode, and external count input. Specific timer events can be selected to generate DMA requests.
     One State Configurable Timer/PWM (SCT) with 6 input and 8 output functions
    (including capture and match). Inputs and outputs can be routed to/from external pins and internally to/from selected peripherals. Internally, the SCT supports 13 captures/matches, 13 events and 13 states.
     32-bit Real-time clock (RTC) with 1 s resolution running in the always-on power domain. A timer in the RTC can be used for wake-up from all low power modes including Deep power-down, with 1 ms resolution. The RTC is clocked by the 32 kHz oscillator.
     Multiple-channel multi-rate 24-bit timer (MRT) for repetitive interrupt generation at up to four programmable, fixed rates.
     Windowed Watchdog Timer (WWDT).
     Ultra-low power Micro-tick Timer, running from the Watchdog oscillator,that can beused to wake up the device from low power modes.
     Repetitive Interrupt Timer (RIT) for debug time-stamping and general-purpose use.
     Analog peripheral: 12-bit, 12-channel, Analog-to-Digital Converter (ADC) supporting 4.8 Msamples/s. The ADC supports two independent conversion sequences.
     Clock generation:
     12 MHz internal RC oscillator.
     External clock input for clock frequencies of up to 24 MHz.
     Internal low-power, watchdog oscillator with a nominal frequency of 500 kHz (WDOSC).
     32 kHz low-power RTC oscillator.
     System PLL allows CPU operation up to the maximum CPU rate. May be run from the internal RC oscillator, the external clock input CLKIN, or the RTC oscillator.
     Clock output function for monitoring internal clocks.
     Frequency measurement unit for measuring the frequency of any on-chip or off-chip clock signal.
     Power-saving modes and wake-up:
     Integrated PMU (Power Management Unit) to minimize power consumption.
     Reduced power modes: Sleep, Deep-sleep, Power-down, and Deep power-down.
     Wake-up from Deep-sleep and Power-down modes via activity on the USART, SPI,and I2C peripherals.
     Wake-up from Sleep, Deep-sleep, Power-down, and Deep power-down modes using the RTC alarm.
     The Micro-tick Timer can wake-up the device from the Deep power-down mode by using the watchdog oscillator when no other on-chip resources are running.
     Single power supply 1.62 V to 3.6 V.
     Power-On Reset (POR).
     Brown-Out Detect (BOD) with separate thresholds for interrupt and forced reset.
     JTAG boundary scan supported.
     Unique device serial number for identification.
     Operating temperature range 40 ℃ to 105 ℃.
     Available in a 3.288 x 3.288 mm WLCSP49 package and LQFP64 package.
    看到这些,我们可以大致了解这款芯片
    1.管脚少 - 49to64Pin 更适应于便携产品
    2.低功耗-尽管M4 架构很费电,但是由于LPC54102具有双核优势,M0 Plus的协处理器可以有效降低功耗 3.低电压 1.8Vor3.3V电压供电,方便电池供电
    4.高速ADC,天哪,有5M的ADC啊。。。不过实际上使用时达不到5M,这个仅限于理论。
    5.PMU MMU FPU ...从寄存器上看每个管脚都配有电流检测,复位等功能,这也是这款芯片更具备稳定性的原因。
    6.不需要外部晶振!真的不需要,这真的是大大节省了空间,降低了生产成本(不过等芯片价格降下来再说了)。
    7.这款芯片效仿了现在最流行的架构,功能模块分离,这样保证了芯片管脚的速率,提高稳定性。
    8.总的来说,这芯片还可以。


    2.分享给大家这些LPC54102的资料(都是有用的,没用的我是不会给你的):
    1.软件安装(给大家提供了 LPC54102的PACK ,LPC_Driver驱动,LPCXpresso软件,选下)
    1. 链接:https://pan.baidu.com/s/1sllJLuP 密码:uybp
    复制代码


    2.关于LPC54102芯片有关的开发板原理图(如果你要是用于产品,做PCB肯定会需要它的)
    1. 链接:https://pan.baidu.com/s/1slEkfoT 密码:37uh
    复制代码


    3.LPC54102库编程----这里有好多公司开发的库,当然都是拿NXP公司的库改的。。。普通人就用这个就很好了
    (简单来说下这个库,库值能调用,不能重新编写,这也是公司便于用户使用做的,但不适合所有人开发,当然也不适合我,不过初学者肯定需要用这个入门,了解NXP公司的编程规则)
    1. 链接:https://pan.baidu.com/s/1c1K0apa 密码:doja
    复制代码


    4.NXP-LPC54102开发资料(像低功耗掉电模式等特殊功能着重讲解进行)
    1. 链接:https://pan.baidu.com/s/1eSNZVBc 密码:8jb8
    复制代码


    5.寄存器开发利器(LPC54102寄存器手册,这个手册是我好不容易搞来的,这里非常感谢那位好心的工程师)
    【这么说吧,今后我讲得所有的东西都是围绕这本寄存器手册讲解的,包括寄存器开发,从启动文件进行逐渐讲解开发流程。我这刚写出了一份精简版的LPC54102_CMSIS,加上总工程一共64kb,这和库开发相比速度更快,编译更快,执行效率更高】
    1. 链接:https://pan.baidu.com/s/1c2mQs2c 密码:renw
    复制代码

    3.LPC寄存器开发入门(我们以M4内核来进行讲解寄存器开发,首先需要了解到LPC的启动顺序)
    1.启动文件: keil_startup_lpc5410x.s//CORE_M4内核启动
    [N87UPSK($BYD0~_@[E}I.png
    经过许多声明文件---->SystemInit这个函数 ---->main函数
    2.SystemInit//系统初始化函数,用于初始化时钟以及相应的配置文件尽管M4内核和M0内核可以同时编译不过为了方便用户理解,还是分成两个不同的工程建立,这里面只存放M4内核的文件。
    1. void SystemInit(void)//系统初始化函数
    2. {
    3.         extern void *__Vectors;
    4.         SCB->VTOR = (uint32_t) &__Vectors;

    5.         FPU_Init();//FPU初始化
    6.         Board_SystemInit();//时钟初始化
    7. }
    复制代码
    率先启动的是FPU,这个寄存器已经在CORE_M4内核文件已经定义了,我们简单看下它的初始化过程:
    1. //FPU配置文件
    2. #define LPC_CPACR           0xE000ED88
    3. #define SCB_MVFR0           0xE000EF40
    4. #define SCB_MVFR0_RESET     0x10110021
    5. #define SCB_MVFR1           0xE000EF44
    6. #define SCB_MVFR1_RESET     0x11000011

    7. void FPU_Init(void)//FPU初始化
    8. {
    9.         volatile uint32_t *regCpacr = (uint32_t *) LPC_CPACR;
    10.         volatile uint32_t *regMvfr0 = (uint32_t *) SCB_MVFR0;
    11.         volatile uint32_t *regMvfr1 = (uint32_t *) SCB_MVFR1;
    12.         volatile uint32_t Cpacr;
    13.         volatile uint32_t Mvfr0;
    14.         volatile uint32_t Mvfr1;
    15.         char vfpPresent = 0;

    16.         Mvfr0 = *regMvfr0;
    17.         Mvfr1 = *regMvfr1;

    18.         vfpPresent = ((SCB_MVFR0_RESET == Mvfr0) && (SCB_MVFR1_RESET == Mvfr1));

    19.         if (vfpPresent) {
    20.                 Cpacr = *regCpacr;
    21.                 Cpacr |= (0xF << 20);
    22.                 *regCpacr = Cpacr;        // enable CP10 and CP11 for full access
    23.         }
    24. }
    复制代码
    我们在这只借助内部IRC时钟启动具体讲解启动过程。
    SYSCON寄存器:
    打开寄存器手册第26页,在SYSCON中有50个配置寄存器,以下是我的寄存器编程方式, 地址+结构体,这样也是为了方便查找寄存器手册。


    1. /* ----------------------------------------------------------------------------
    2.    -- System configuration (SYSCON)
    3.    ---------------------------------------------------------------------------- */
    4. // LPC5410x System configuration (SYSCON)  P26
    5. //Register overview: Main system configuration (base address 0x4000 0000)

    6. //地址
    7. #define SYSCON_BASE_PTR                                                                ((SYSCON_MemMapPtr)0x40000000UL)

    8. //结构体
    9. typedef struct SYSCON_MemMap{
    10.         uint32_t AHBMATPRIO;                        /*!< System Remap register */
    11.         uint32_t RESERVED0[4];
    12.         uint32_t SYSTCKCAL;                                /*!< System Tick Calibration register */
    13.         uint32_t RESERVED1[1];
    14.         uint32_t NMISRC;                                        /*!< NMI Source select register */
    15.         uint32_t ASYNCAPBCTRL;                /*!< Asynch APB chiplet control register */
    16.         uint32_t RESERVED2[7];
    17.         uint32_t SYSRSTSTAT;                        /*!< System Reset Stat register */
    18.         uint32_t PRESETCTRL[2];                /*!< Peripheral Reset Ctrl register */
    19.         uint32_t PRESETCTRLSET[2];/*!< Peripheral Reset Ctrl Set register */
    20.         uint32_t PRESETCTRLCLR[2];/*!< Peripheral Reset Ctrl Clr register */
    21.         uint32_t PIOPORCAP[2];                /*!< PIO Power-On Reset Capture register */
    22.         uint32_t RESERVED3[1];
    23.         uint32_t PIORESCAP[2];                /*!< PIO Pad Reset Capture register */
    24.         uint32_t RESERVED4[4];
    25.         uint32_t MAINCLKSELA;                        /*!< Main Clk sel Source Sel A register */
    26.         uint32_t MAINCLKSELB;                        /*!< Main Clk sel Source Sel B register */
    27.         uint32_t RESERVED5;
    28.         uint32_t ADCCLKSEL;                                /*!< ADC Async Clk Sel register */
    29.         uint32_t RESERVED6;
    30.         uint32_t CLKOUTSELA;                        /*!< Clk Out Sel Source A register */
    31.         uint32_t CLKOUTSELB;                        /*!< Clk Out Sel Source B register */
    32.         uint32_t RESERVED7;
    33.         uint32_t SYSPLLCLKSEL;                /*!< System PLL Clk Selregister */
    34.         uint32_t RESERVED8[7];
    35.         uint32_t AHBCLKCTRL[2];                /*!< AHB Peripheral Clk Enable register */
    36.         uint32_t AHBCLKCTRLSET[2];/*!< AHB Peripheral Clk Enable Set register */
    37.         uint32_t AHBCLKCTRLCLR[2];/*!< AHB Peripheral Clk Enable Clr register */
    38.         uint32_t RESERVED9[2];
    39.         uint32_t SYSTICKCLKDIV;                /*!< Systick Clock divider register */
    40.         uint32_t RESERVED10[7];
    41.         uint32_t AHBCLKDIV;                                /*!< Main Clk Divider register */
    42.         uint32_t RESERVED11;
    43.         uint32_t ADCCLKDIV;                                /*!< ADC Async Clk Divider register */
    44.         uint32_t CLKOUTDIV;                                /*!< Clk Out Divider register */
    45.         uint32_t RESERVED12[4];
    46.         uint32_t FREQMECTRL;                        /*!< Frequency Measure Control register */
    47.         uint32_t FLASHCFG;                                /*!< Flash Config register */
    48.         uint32_t RESERVED13[8];
    49.         uint32_t FIFOCTRL;                                /*!< VFIFO control register */
    50.         uint32_t RESERVED14[14];
    51.         uint32_t RESERVED15[1];
    52.         uint32_t RESERVED16[2];
    53.         uint32_t RTCOSCCTRL;                        /*!< RTC Oscillator Control register */
    54.         uint32_t RESERVED17[7];
    55.         uint32_t SYSPLLCTRL;                        /*!< System PLL control register */
    56.         uint32_t SYSPLLSTAT;                        /*!< PLL status register */
    57.         uint32_t SYSPLLNDEC;                        /*!< PLL N decoder register */
    58.         uint32_t SYSPLLPDEC;                        /*!< PLL P decoder register */
    59.         uint32_t SYSPLLSSCTRL[2];        /*!< Spread Spectrum control registers */
    60.         uint32_t RESERVED18[18];
    61.         uint32_t PDRUNCFG;                                /*!< Power Down Run Config register */
    62.         uint32_t PDRUNCFGSET;                        /*!< Power Down Run Config Set register */
    63.         uint32_t PDRUNCFGCLR;                        /*!< Power Down Run Config Clr register */
    64.         uint32_t RESERVED19[9];
    65.         uint32_t STARTERP[2];                        /*!< Start Signal Enable Register */
    66.         uint32_t STARTERSET[2];                /*!< Start Signal Enable Set Register */
    67.         uint32_t STARTERCLR[2];                /*!< Start Signal Enable Clr Register */
    68.         uint32_t RESERVED20[42];
    69.         uint32_t RESERVED20A[4];
    70.         uint32_t RESERVED21[57];
    71.         uint32_t JTAG_IDCODE;
    72.         uint32_t DEVICE_ID0;                        /*!< Boot ROM and die revision register */
    73.         uint32_t DEVICE_ID1;                        /*!< Boot ROM and die revision register */
    74. } volatile *SYSCON_MemMapPtr;
    复制代码



    1.我们首先关注的是Board_SYSCON_PowerUp 函数 ,同时对应着 Board_SYSCON_PowerDown函数
    这两个函数主要作用是用于控制模块电源的。
    这两个寄存器的配置在P54
    SYSCON_BASE_PTR->DRUNCFGCLR    //Power Down Run Config Clr register
    SYSCON_BASE_PTR->DRUNCFGSET    //Power Down Run Config Set register
    一般可以直接用PDRUNCFG对寄存器进行写0写1,但是为防止出现问题采用 SET 和 CLR 寄存分别进行 开关。同样控制的还是 CFG寄存器的数据
    0VV]_ACJ1U2{K50T{RQQB8P.png
    为了对其进行快速配置,我们采用宏定义方式对其操作:
    例如: Board_SYSCON_PowerUp(SYSCON_PDRUNCFG_PD_IRC_OSC | SYSCON_PDRUNCFG_PD_IRC);
    1. //电源控制寄存器
    2. //SYSCON->PDRUNCFGCLR
    3. //SYSCON->PDRUNCFGSET
    4. /* Power control definition bits (0 = powered, 1 = powered down) */
    5. #define SYSCON_PDRUNCFG_PD_IRC_OSC       (1 << 3)                /*!< IRC oscillator output */
    6. #define SYSCON_PDRUNCFG_PD_IRC           (1 << 4)                /*!< IRC oscillator */
    7. #define SYSCON_PDRUNCFG_PD_FLASH         (1 << 5)                /*!< Flash memory */
    8. #define SYSCON_PDRUNCFG_PD_BOD_RST       (1 << 7)                /*!< Brown-out Detect reset */
    9. #define SYSCON_PDRUNCFG_PD_BOD_INTR      (1 << 8)                /*!< Brown-out Detect interrupt */
    10. #define SYSCON_PDRUNCFG_PD_ADC0          (1 << 10)                /*!< ADC0 */
    11. #define SYSCON_PDRUNCFG_PD_SRAM0A        (1 << 13)                /*!< First 8 kB of SRAM0 */
    12. #define SYSCON_PDRUNCFG_PD_SRAM0B        (1 << 14)                /*!< Remaining portion of SRAM0 */
    13. #define SYSCON_PDRUNCFG_PD_SRAM1         (1 << 15)                /*!< SRAM1 */
    14. #define SYSCON_PDRUNCFG_PD_SRAM2         (1 << 16)                /*!< SRAM2 */
    15. #define SYSCON_PDRUNCFG_PD_ROM           (1 << 17)                /*!< ROM */
    16. #define SYSCON_PDRUNCFG_PD_VDDA_ENA      (1 << 19)                /*!< Vdda to the ADC, must be enabled for the ADC to work */
    17. #define SYSCON_PDRUNCFG_PD_WDT_OSC       (1 << 20)                /*!< Watchdog oscillator */
    18. #define SYSCON_PDRUNCFG_PD_SYS_PLL       (1 << 22)                /*!< PLL0 */
    19. #define SYSCON_PDRUNCFG_PD_VREFP         (1 << 23)                /*!< Vrefp to the ADC, must be enabled for the ADC to work */
    20. #define SYSCON_PDRUNCFG_PD_32K_OSC       (1 << 24)                /*!< 32 kHz RTC oscillator */
    复制代码
    同理对于其他寄存器我们也是进行类似操作。

    2.内部时钟和锁相环初始化函数的寄存器简要介绍:
    1. void Board_SetupIrcClocking(void)//启动内部时钟震荡器
    2. {
    3.         PLL_CONFIG_T pllConfig;
    4.         PLL_SETUP_T pllSetup;
    5.         PLL_ERROR_T pllError;

    6.         /* Turn on the IRC by clearing the power down bit 通过清除掉电点 打开IRC */
    7.         Board_SYSCON_PowerUp(SYSCON_PDRUNCFG_PD_IRC_OSC | SYSCON_PDRUNCFG_PD_IRC);

    8.         /* Select the PLL input to the IRC 选择PLL的输入为IRC */
    9.         Board_Clock_SetSystemPLLSource(SYSCON_PLLCLKSRC_IRC);

    10.         /* Setup FLASH access 启动Flash配置 */
    11.         Board_SetupFlashClocks();

    12.         /* Power down PLL to change the PLL divider ratio 掉电锁相环改变锁相环分频比 */
    13.         Board_SYSCON_PowerDown(SYSCON_PDRUNCFG_PD_SYS_PLL);

    14.         /* Setup PLL configuration */
    15.         pllConfig.desiredRate = BOARD_MAINCLOCKRATE;
    16.         pllConfig.InputRate = 0;
    17.         pllConfig.flags = PLL_CONFIGFLAG_FORCENOFRACT;
    18.         pllError = Board_Clock_SetupPLLData(&pllConfig, &pllSetup);
    19.         if (pllError == PLL_ERROR_SUCCESS) {
    20.                 pllSetup.flags = PLL_SETUPFLAG_WAITLOCK | PLL_SETUPFLAG_ADGVOLT;
    21.                 pllError = Board_Clock_SetupSystemPLLPrec(&pllSetup);
    22.         }

    23.         /* Set system clock divider to 1 将系统时钟分频器设置为1 */
    24.         Board_Clock_SetSysClockDiv(1);

    25.         /* Set main clock source to the system PLL. This will drive 24MHz
    26.            for the main clock and 24MHz for the system clock
    27.                  将主时钟源设置为系统锁相环。这将为系统时钟,主时钟和24MHz 24mhz驱动*/
    28.         Board_Clock_SetMainClockSource(SYSCON_MAINCLKSRC_PLLOUT);

    29.         /* ASYSNC SYSCON needs to be on or all serial peripheral won't work.
    30.            Be careful if PLL is used or not, ASYNC_SYSCON source needs to be
    31.            selected carefully. asysnc该需要或所有串行外设不能正常工作。如果锁相环的使用或不小心,async_syscon源需要仔细选择。*/
    32.         Board_SYSCON_Enable_ASYNC_Syscon(true);
    33.         
    34.         Board_Clock_SetAsyncSysconClockDiv(1);
    35.         
    36.         Board_Clock_SetAsyncSysconClockSource(SYSCON_ASYNC_IRC);
    37. }
    复制代码


    关于配置时钟的顺序,这幅图示简单介绍了配置流程:
    J8QZ%A~O1V9SDD{Y[~~Z{(T.png

    好了,到此为止,关于时钟初始化简单讲这些,这是我建的一个小历程 project.zip (63.35 KB, 下载次数: 25)
    成功的小小喜悦里,大脑自身可以产生兴奋剂哦!
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-3-22 20:15
  • 签到天数: 21 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    23

    主题

    341

    帖子

    1

    高级会员

    Rank: 4

    积分
    909
    最后登录
    2019-4-7
     楼主| 发表于 2017-3-21 11:48:32 | 显示全部楼层
    本帖最后由 噬猎者 于 2017-3-21 11:58 编辑

    我要分享-LPC541XX系列单片机寄存器快速配置历程
    前些日子实在太忙了,现在把已投入使用的LPC54102单片机的通用型寄存器的快速配置分享给大家:

    可能这次的会包含原帖的一些东西,具体涉及到具体的寄存器就不给大家讲解了,教会大家如何快速配置和使用吧!

    1.LED灯测试(GPIO输出功能测试)-IOCON寄存器,GPIO寄存器
    1. void All_Init(void)//全部初始化
    2. {
    3.         SysClock_Init();//时钟初始化
    4.         LED_Init();//LED初始化
    5.         Chip_Clock_DisablePeriphClock(SYSCON_CLOCK_IOCON);// 禁能IOCON时钟,不关也可以,关了省电,还可以提高程序稳定性
    6. }

    7. void SysClock_Init(void)//时钟初始化
    8. {
    9.         Chip_Clock_EnablePeriphClock(SYSCON_CLOCK_INPUTMUX);
    10.         Chip_Clock_EnablePeriphClock(SYSCON_CLOCK_IOCON);
    11.         
    12.         Chip_Clock_EnablePeriphClock(SYSCON_CLOCK_GPIO0);
    13.         Chip_Clock_EnablePeriphClock(SYSCON_CLOCK_GPIO1);
    14. }

    15. void LED_Init(void)//LED初始化
    16. {
    17.         //LED_R P1-13
    18.         //LED_G P1-12
    19.         //LED_B P0-15
    20.         PORT1_IOCON13 = 0x00000180;
    21.         PORT1_GPIO_DIR |= 1UL << 13;
    22.         LED_RED_OFF;
    23.         
    24.         PORT1_IOCON12 = 0x00000180;
    25.         PORT1_GPIO_DIR |= 1UL << 12;
    26.         LED_GREEN_OFF;
    27.         
    28.         PORT0_IOCON15 = 0x00000180;
    29.         PORT0_GPIO_DIR |= 1UL << 15;
    30.         LED_BLUE_OFF;
    31. }
    复制代码
    GPIO寄存器的管脚电平设置可参考LED的宏定义:
    1. //LED
    2. #define LED_R PORT1_OUT(13)
    3. #define LED_G PORT1_OUT(12)
    4. #define LED_B PORT0_OUT(15)
    5.         
    6.         
    7. #define LED_RED_OFF        PORT1_GPIO_SET |= 1<<13
    8. #define LED_GREEN_OFF        PORT1_GPIO_SET |= 1<<12
    9. #define LED_BLUE_OFF        PORT0_GPIO_SET |= 1<<15

    10. #define LED_RED_ON                PORT1_GPIO_CLR |= 1<<13
    11. #define LED_GREEN_ON        PORT1_GPIO_CLR |= 1<<12
    12. #define LED_BLUE_ON         PORT0_GPIO_CLR |= 1<<15

    13. #define LED_RED_TURN        PORT1_GPIO_NOT |= 1<<13
    14. #define LED_GREEN_TURN        PORT1_GPIO_NOT |= 1<<12
    15. #define LED_BLUE_TURN         PORT0_GPIO_NOT |= 1<<15
    复制代码
    2.UART测试(UART 发送/接收/中断 功能测试)-USART0-3寄存器
    1. void All_Init(void)//全部初始化
    2. {
    3.         SysClock_Init();//时钟初始化
    4.         Uart_Init();//串口初始化
    5.         Chip_Clock_DisablePeriphClock(SYSCON_CLOCK_IOCON);// 禁能IOCON时钟,不关也可以,关了省电,还可以提高程序稳定性
    6. }

    7. void SysClock_Init(void)//时钟初始化
    8. {
    9.         Chip_Clock_EnablePeriphClock(SYSCON_CLOCK_INPUTMUX);
    10.         Chip_Clock_EnablePeriphClock(SYSCON_CLOCK_IOCON);
    11.         
    12.         Chip_Clock_EnablePeriphClock(SYSCON_CLOCK_GPIO0);
    13.         Chip_Clock_EnablePeriphClock(SYSCON_CLOCK_GPIO1);
    14.         
    15.         Chip_Clock_EnablePeriphClock(SYSCON_CLOCK_USART1);//使能UASRT时钟
    16.         Chip_Clock_EnablePeriphClock(SYSCON_CLOCK_FRG);
    17. }

    18. void Uart_Init(void)//串口初始化
    19. {
    20. //UART_TXD P0-5 U1
    21. //UART_RXD P0-6 U1
    22. //使能管脚:
    23.         PORT0_IOCON5 = 0x00000181;
    24.         PORT0_IOCON6 = 0x00000181;

    25.         UART1_CFG=0;//首先禁止通信
    26.         UART1_CTL=0;//清除所有设置
    27.         UART1_CFG |= 0x04UL;//设置8位数据,1位停止,无奇偶校验
    28.         LPC_ASYNC_SYSCON->FRGCTRL = ((uint32_t) 0x7d << 8) | 0xFF;
    29.         //波特率
    30.         UART1_OSR = 0xd;
    31.         UART1_BRG = 4;
    32.         UART1_CFG |= 0x01u;// 配置完成允许通信
    33. //启动串口接收中断
    34.         UART1_INTENSET = 0x01;
    35.         UART1_CFG |= 0x0100u;//配置串口接收中断
    36.         NVIC_ClearPendingIRQ(UART1_IRQn);//清除任何挂起的串口中断
    37.         NVIC_EnableIRQ(UART1_IRQn);//使能串口接收中断
    38.         NVIC_SetPriority(UART1_IRQn,1);//设置串口接收中断优先级
    39. }
    复制代码
    发送和接收请参考如下程序,由于printf属于FIRL中函数,就不给大家编写了,需要的可以询问我
    1. uint8 UART_getchar(void)//串口接收一个字符
    2. {
    3.         while(!(UART1_STAT & 0x01)){}//等待接收机就绪
    4.                 return UART1_RXDAT;
    5. }
    6. void UART_putchar(uint8 num)//串口打印一个字符
    7. {
    8.         while(!(UART1_STAT&0x04)){}// 等待发射机就绪
    9.                 UART1_TXDAT = num;
    10. }
    11. void UART_putbuff(uint8 *buff, uint32 len)//输出字符串数据
    12. {
    13.     while(len--)
    14.     {
    15.         UART_putchar(*buff);
    16.         buff++;
    17.     }
    18. }
    复制代码
    3.按键测试(GPIO输入功能测试)-IOCON寄存器,GPIO寄存器
    1. void KEY_Init(void)//按键初始化        
    2. {
    3.         //KEY1-KEY6 P0-29 (注意23-28无内部上拉功能)
    4.         //总线配置:输入上拉模式
    5.         PORT0_IOCON9 = 0x00000190;
    6.         PORT0_IOCON10 = 0x00000190;
    7.         PORT0_IOCON11 = 0x00000190;
    8.         PORT0_IOCON12 = 0x00000190;
    9.         PORT0_IOCON13 = 0x00000190;
    10.         PORT0_IOCON14 = 0x00000190;
    11.         PORT0_GPIO_DIR &= ~(0x00007e00);//配置为输入模式
    12. }
    复制代码
    1. #define Read_DIP_SW1 PORT0_IN(3)//拨码开关1
    2. #define Read_DIP_SW2 PORT0_IN(2)//拨码开关2        
    3. #define Read_DIP_SW3 PORT0_IN(7)//拨码开关3
    复制代码
    这个是以总线形式读取键值,需要并口读入的可以这样用
    1. #define READ_KEY_DATA ((PORT0_GPIO_PIN>>9)&0x3f)//获取键值(总线形式获取键值)
    复制代码
    4.PWM测试(SCT专用PWM输出功能测试)-SCT寄存器
    1. void All_Init(void)//全部初始化
    2. {
    3.         SysClock_Init();//时钟初始化
    4.         PWM_Init();//PWM初始化
    5.         Chip_Clock_DisablePeriphClock(SYSCON_CLOCK_IOCON);// 禁能IOCON时钟,不关也可以,关了省电,还可以提高程序稳定性
    6. }

    7. void SysClock_Init(void)//时钟初始化
    8. {
    9.         Chip_Clock_EnablePeriphClock(SYSCON_CLOCK_INPUTMUX);
    10.         Chip_Clock_EnablePeriphClock(SYSCON_CLOCK_IOCON);
    11.         
    12.         Chip_Clock_EnablePeriphClock(SYSCON_CLOCK_GPIO0);
    13.         Chip_Clock_EnablePeriphClock(SYSCON_CLOCK_GPIO1);
    14.         
    15.         Chip_Clock_EnablePeriphClock(SYSCON_CLOCK_SCT0);
    16.         Chip_SYSCON_PeriphReset(RESET_SCT0);
    17. }
    复制代码
    1. #define SETSCT_PWM 10000//10KHZ        100 000 000/计数频率 = SETSCT_PWM        这里包含着计数值 100 000 000 /10000 = 10000
    2. void PWM_Init(void)//PWM初始化
    3. {        
    4. //Stop SCT
    5.         SCT_CTRL_U = 0x00040004;//HALT_H HALT_L位 1 停止SCT
    6. //清除计数器
    7.         SCT_CTRL_U |= 0x00080008;//CLRCTR_L CLRCTR_H
    8.         SCT_REGMODE_L = 0;
    9.         SCT_REGMODE_H = 0;
    10.         SCT_MATCH0_U = 0;
    11.         SCT_MATCHREL0_U = SETSCT_PWM;
    12.         SCT_EVENT0_CTRL = 1 << 12;
    13.         SCT_EVENT0_STATE = 1;
    14.         /* Set SCT Counter to count 32-bits and reset to 0 after reaching MATCH0 */        
    15.         SCT_CONFIG = 0x00020001;//SCT_CONFIG_AUTOLIMIT_L  SCT_CONFIG_32BIT_COUNTER
    16. //修改这里:        
    17. //        PWM:1.P1.3-sctout6 2.P1.4-sctout7    3.P1.2-sctout5  4.P1.1-sctout4
    18.         PORT1_IOCON3 = 0x00000183;
    19.         PORT1_IOCON4 = 0x00000183;
    20.         PORT1_IOCON2 = 0x00000183;
    21.         PORT1_IOCON1 = 0x00000183;
    22.                
    23.         SCTPWM_SetOutPin(1, 6);//定义PWM识别码(随意设置,不超过8个)
    24.         SCTPWM_SetOutPin(2, 7);
    25.         SCTPWM_SetOutPin(3, 5);
    26.         SCTPWM_SetOutPin(4, 4);

    27.         SCTPWM_SetDutyCycle(1,10000);//设置占空比
    28.         SCTPWM_SetDutyCycle(2,10000);
    29.         SCTPWM_SetDutyCycle(3,10000);
    30.         SCTPWM_SetDutyCycle(4,10000);

    31. //启动SCT
    32.         SCT_CTRL_U &= ~(0x00040004);//SCT_CTRL_HALT_L,SCT_CTRL_HALT_H
    33. }

    34. void SCTPWM_SetOutPin( uint8_t index, uint8_t pin)
    35. {
    36.         ((SCT0_BASE_PTR)->EVENT[index].CTRL) = index | (1 << 12);
    37.         ((SCT0_BASE_PTR)->EVENT[index].STATE) = 1;
    38.         ((SCT0_BASE_PTR)->OUT[pin].SET) = 1;
    39.         ((SCT0_BASE_PTR)->OUT[pin].CLR) = 1 <<index;
    40.         SCT_RES = (SCT_RES & ~(3 << (pin << 1))) | (0x01 << (pin << 1));
    41.         SCT_OUTPUTDIRCTRL = (SCT_OUTPUTDIRCTRL & ~(3 << (pin << 1)));
    42. }

    43. void SCTPWM_SetDutyCycle( uint8_t index, uint32_t ticks)
    44. {
    45.         
    46. #if 1 //占空比0% - 输出0 占空比100% - 输出1        
    47.         ((SCT0_BASE_PTR)->MATCHREL[index].U) = ticks;
    48. #else //占空比0% - 输出1 占空比100% - 输出0        
    49.         if(ticks > SETSCT_PWM) ticks = SETSCT_PWM;
    50.         ((SCT0_BASE_PTR)->MATCHREL[index].U) = SETSCT_PWM-ticks;
    51. #endif
    52. }
    复制代码
    5.定时器 中断测试(TIME通用型定时器功能测试)-CT32B0/1/2/3/4寄存器
    1. void All_Init(void)//全部初始化
    2. {
    3.         SysClock_Init();//时钟初始化
    4.         Time_Init();//定时器初始化
    5.         Chip_Clock_DisablePeriphClock(SYSCON_CLOCK_IOCON);// 禁能IOCON时钟,不关也可以,关了省电,还可以提高程序稳定性
    6. }

    7. void SysClock_Init(void)//时钟初始化
    8. {
    9.         Chip_Clock_EnablePeriphClock(SYSCON_CLOCK_INPUTMUX);
    10.         Chip_Clock_EnablePeriphClock(SYSCON_CLOCK_IOCON);
    11.         
    12.         Chip_Clock_EnablePeriphClock(SYSCON_CLOCK_GPIO0);
    13.         Chip_Clock_EnablePeriphClock(SYSCON_CLOCK_GPIO1);
    14.         
    15.         Chip_Clock_EnablePeriphClock(SYSCON_CLOCK_TIMER0);
    16.         Chip_SYSCON_PeriphReset(RESET_TIMER0);
    17. }

    18. #define TIME_SET_MATCH 1//用来选择定时器的控制终端
    19. #define TIME_SET_RATE 12000//RATE = BOARD_EXTCLKINRATE/TICKRATE_HZ    (12 000 000 HZ)/(1000HZ)
    20. void Time_Init(void)//定时器初始化
    21. {
    22.         uint32_t reg;
    23.         TIMER0_PR=0;//在PCLK时钟定时器设定预定值0
    24.         //定时器复位控制
    25.         reg = TIMER0_TCR;//禁用定时器,设置终端数为非0
    26.         TIMER0_TCR = 0;
    27.         TIMER0_TC = 1;
    28.         TIMER0_TCR = 0x02;//软复位定时器计数器
    29.         while (TIMER0_TC != 0) {}//等待终端计数清除
    30.         TIMER0_TCR = reg;//恢复定时器状态        
    31.         //使定时器在时间匹配时产生中断,这里我们配置MR0
    32.         TIMER0_MCR |= 1<<(TIME_SET_MATCH)*3;
    33.         TIMER0_MR(TIME_SET_MATCH) = TIME_SET_RATE;//设置定时器时间
    34.         //设置定时器在匹配发生时重新启动        
    35.         TIMER0_MCR |= 1<<((TIME_SET_MATCH) * 3 + 1);
    36.         //启动定时器
    37.         TIMER0_TCR |=  0x01;//Counter enable
    38.         //清除任何挂起的中断的计时器
    39.         NVIC_ClearPendingIRQ(CT32B0_IRQn);
    40.         //使能定时器中断
    41.         NVIC_EnableIRQ(CT32B0_IRQn);
    42.         //配置定时器中断优先级
    43.         NVIC_SetPriority(CT32B0_IRQn,2);
    44. /*
    45.         定时器中断配置:注意修改该项目数据
    46.         if((TIMER0_IR & (1<<TIME_SET_MATCH))!=0)//中断信号检测
    47.         {        TIMER0_IR |= (1<<TIME_SET_MATCH);//清除中断信号
    48.                
    49.         }
    50. */               
    51. }
    复制代码
    1. <font size="2">//定时器中断处理函数
    2. void CT32B0_IRQHandler(void)
    3. {
    4.         if((TIMER0_IR & (1<<TIME_SET_MATCH))!=0)//中断信号检测
    5.         {        TIMER0_IR |= (1<<TIME_SET_MATCH);//清除中断信号
    6.                
    7.         }
    8. }        </font>
    复制代码


    6.定时器 输入捕获测试(速度脉冲计数器(不启用触发中断)
    )-CT32B0/1/2/3/4寄存器
    (以下均需要开启对应时钟源)
    1. void Speed_InputCapture_Init(void)//速度脉冲计数初始化
    2. {//设置计数器为外部边沿触发计数器
    3. //        P1-6  CT32B1_CAP2
    4. //        P0-20 CT32B3_CAP0         
    5.         PORT1_IOCON6 &= ~0x07;//配置为输入捕获功能
    6.         PORT1_IOCON6 |= 0x03;
    7.         
    8.         PORT0_IOCON20 &= ~0x07;//配置为输入捕获功能
    9.         PORT0_IOCON20 |= 0x03;
    10. //1.定时器复位        
    11.         TIMER1_TCR = 0x02;//软复位定时器计数器
    12. //2.定时器设置
    13.         TIMER1_CTCR = 0x02|((2)<<2);// Count Control Register 计数控制计数器        
    14. //3.启动定时器
    15.         TIMER1_TCR =  0x01;//Counter enable
    16.         
    17. //1.定时器复位        
    18.         TIMER3_TCR = 0x02;//软复位定时器计数器
    19. //2.定时器设置
    20.         TIMER3_CTCR = 0x02|((0)<<2);// Count Control Register 计数控制计数器        
    21. //3.启动定时器
    22.         TIMER3_TCR =  0x01;//Counter enable        
    23.         
    24. //        TIMER1_TC ,TIMER3_TC反馈的是测速值
    25. }
    复制代码

    7.定时器 PWM输出测试-CT32B0/1/2/3/4寄存器
    (以下均需要开启对应时钟源)

    1. #define ENGINE_PWM_Duty                 1000 //周期计数大小
    2. #define ENGINE_PWM_Frequency         100 //PWM输出频率 Hz
    3. void Engine_PWM_Init(void)//舵机PWM输出控制初始化
    4. {
    5. //        P0.14 CT32B2_MAT1
    6.         //匹配时输出1 低于匹配值时输出0
    7.         PORT0_IOCON14 &= ~0x07;
    8.         PORT0_IOCON14 |= 0x03;  //CT32B2_MAT1     
    9.         
    10.         TIMER2_TCR = 0x02;//复位定时器
    11.         
    12.         TIMER2_PC = 0x00;        
    13.         TIMER2_PR = (uint16)(100000000/(ENGINE_PWM_Duty*ENGINE_PWM_Frequency))-1;//分频因子
    14.         TIMER2_PWMC = 0X01<<(1);//设置 MATn 为PWM输出引脚
    15.         
    16.         TIMER2_MCR = 0x02<<0;//设置MR0匹配时复位TC,也就是把MR0当做周期寄存器
    17.         TIMER2_MR(0) = ENGINE_PWM_Duty-1;//设置周期
    18.         TIMER2_MR(1) = 90;//设置占空比MATn
    19.         TIMER2_TCR = 0X01;//启动定时器
    20. //TIMER2_MR(1)修改舵机PWM,注意不要超过总的周期呀!尽量写个限幅
    21. }
    复制代码
    8.SysTick 计时器测试(CORE库)-SysTick寄存器(为了检查程序相应速度)
    1. void Timer_Start(void)//启动计时器
    2. {
    3.         SysTick->CTRL = 0x1<<2;        //SYSTICK使用内部时钟源
    4.         SysTick->VAL = 0;//清空VAL值
    5.         SysTick->LOAD = 10000000;//计数最大值
    6.         SysTick->CTRL |= 0x1;//启动计时器
    7. }
    8. uint16 Get_Timer(void)//关闭计时器并获取计时器数据 ---uS
    9. {
    10.         static uint16 Timer_Result;
    11.         Timer_Result = SysTick->VAL;
    12.         SysTick->CTRL &= ~(0x1);//关闭计时器
    13.         Timer_Result = (10000000 - Timer_Result)/34;        
    14.         return         Timer_Result;
    15. }
    复制代码
    9.ADC测试-ADC0寄存器
    1. #define ADC_RESOL_BIT        12        //12位ADC转换
    2. void ADC_Init(void)//ADC初始化
    3. {
    4.         uint32 i=0;
    5.         uint32_t ctrl;
    6.         uint32_t tmp;
    7. //1.配置管脚功能(ADC管脚采用 模拟 )
    8.         PORT0_IOCON29 = 0x01;//adc0
    9. //        PORT1_IOCON1 = 0x01;//adc4
    10. //        PORT1_IOCON2 = 0x01;//adc5
    11. //        PORT1_IOCON3 = 0x01;//adc6
    12.         
    13.         
    14. //2.ADC配置
    15.         Chip_SYSCON_PowerUp(SYSCON_PDRUNCFG_PD_ADC0 | SYSCON_PDRUNCFG_PD_VDDA_ENA | SYSCON_PDRUNCFG_PD_VREFP);//启动ADC模块供电电源
    16.         Chip_Clock_EnablePeriphClock(SYSCON_CLOCK_ADC0);//开启ADC0时钟
    17.         Chip_SYSCON_PeriphReset(RESET_ADC0);//复位ADC0
    18.         SYSCON_BASE_PTR->ADCCLKSEL = (uint32_t) 0x00;
    19.         SYSCON_BASE_PTR->ADCCLKDIV = 0x1;        
    20.         ADC_SEQA_CTRL = 0x00;
    21.         ADC_SEQB_CTRL = 0x00;
    22.         //配置ADC管脚:需要修改这个!!!
    23.         ADC_SEQA_CTRL = (0x1<<0)|0xa0000000;        // 信道11:0 |0xa0000000  启动信道0
    24.         
    25. //ADC分辨率设置://3-12 2-10 1-8 0-6
    26. #if ADC_RESOL_BIT == 12
    27.         ADC_CTRL = ((0x3)<<9)|0xFF;
    28. #elif ADC_RESOL_BIT == 10
    29.         ADC_CTRL = ((0x2)<<9)|0xFF;
    30. #elif ADC_RESOL_BIT == 8
    31.         ADC_CTRL = ((0x1)<<9)|0xFF;
    32. #else
    33.         ADC_CTRL = ((0x0)<<9)|0xFF;
    34. #endif        
    35.         ADC_STARTUP = 0x1;
    36.         for ( i = 0; i < 0x10; i++ ) {}        
    37. //校准
    38.         //1,设置ADC频率为30MHz        
    39.         ctrl = ADC_CTRL & 0x00007fff;
    40.         tmp = ctrl;
    41.         tmp &= ~(1 << 8);               
    42.         ADC_CTRL = tmp | 0x63;
    43.         //2,启动校准        
    44.         ADC_CALIBR = 0x01;
    45.         i = 0xF0000;
    46.         while ( (ADC_CALIBR & 0x01) && --i );
    47.         //3,设置频率为原频率        
    48.         ADC_CTRL = ctrl;
    49. //启动ADC               
    50.         ADC_STARTUP = 0x3;
    51.                
    52. /*读取ADCn数据
    53.                 ADC_SEQA_CTRL|=0x1<<26;
    54.                 while ((ADC_DAT3 & 0x80000000U) ==0);// 等待转换完成
    55.                 ADC_Result = (ADC_DAT3>>4)&0xFFF;
    56. */               
    57. }
    复制代码
    10.FPU测试-FPU的库我已经添加进去了,可以下载源代码查看,并测试运算速度

    源代码: 工程源码.zip (3.43 MB, 下载次数: 18)
    成功的小小喜悦里,大脑自身可以产生兴奋剂哦!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-12-1 10:26
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    0

    主题

    20

    帖子

    0

    注册会员

    Rank: 2

    积分
    64
    最后登录
    2017-5-11
    发表于 2016-11-10 21:21:33 来自手机 | 显示全部楼层
    怎么可以这么666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-11-23 10:20
  • 签到天数: 45 天

    连续签到: 1 天

    [LV.5]常住居民I

    5

    主题

    693

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1404
    最后登录
    2025-7-18
    发表于 2016-11-10 21:54:25 | 显示全部楼层
    感谢分享
    dfdfdfdfdfdfdfd dsfa222
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2025-5-7 09:07
  • 签到天数: 353 天

    连续签到: 1 天

    [LV.8]以坛为家I

    141

    主题

    8056

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5785
    最后登录
    2025-5-7
    发表于 2016-11-10 22:05:37 | 显示全部楼层
    好多英文            
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16698
    最后登录
    1970-1-1
    发表于 2016-11-10 23:58:23 | 显示全部楼层
    看看.....
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2020-6-18 08:45
  • 签到天数: 812 天

    连续签到: 1 天

    [LV.10]以坛为家III

    66

    主题

    4899

    帖子

    64

    金牌会员

    Rank: 6Rank: 6

    积分
    6321
    最后登录
    2025-7-15
    发表于 2016-11-11 00:04:51 | 显示全部楼层
    要是有板子就好啦
    开心
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2017-1-16 12:20
  • 签到天数: 16 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    12

    主题

    653

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1667
    最后登录
    2022-5-2
    发表于 2016-11-11 08:12:35 | 显示全部楼层
    你怎么可以7块板子?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 13:58
  • 签到天数: 2090 天

    连续签到: 5 天

    [LV.Master]伴坛终老

    65

    主题

    8397

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    14180
    最后登录
    2025-7-18
    发表于 2016-11-11 08:26:43 | 显示全部楼层
    不错不错
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-3-22 20:15
  • 签到天数: 21 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    23

    主题

    341

    帖子

    1

    高级会员

    Rank: 4

    积分
    909
    最后登录
    2019-4-7
     楼主| 发表于 2016-11-12 14:26:22 | 显示全部楼层
    浪迹天涯123 发表于 2016-11-11 08:12
    你怎么可以7块板子?

    团队开发
    成功的小小喜悦里,大脑自身可以产生兴奋剂哦!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-3-22 20:15
  • 签到天数: 21 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    23

    主题

    341

    帖子

    1

    高级会员

    Rank: 4

    积分
    909
    最后登录
    2019-4-7
     楼主| 发表于 2016-11-12 14:28:18 | 显示全部楼层

    可以的话,肖久过几天会送5411x。我们主要是用54102做项目用,不过个人想要板子的话网上也有卖的
    成功的小小喜悦里,大脑自身可以产生兴奋剂哦!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-19 23:11 , Processed in 0.127815 second(s), 34 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表