本帖最后由 北方. 于 2017-6-22 15:22 编辑
1. LPC54114开发板收到了,确实不错,如图。
在包装盒清楚地说明了产品的性能和支持的外设,都不用再找datasheet了。
、
2. 芯片性能
2.1 LPC5410x是基于ARM Cortex-M4的微控制器,适用于嵌入式应用。这些器件包括可选的ARM Cortex-M0 +协处理器、104 kB的片上SRAM、高达512 kB的片上闪存、五个通用定时器、一个具有PWM功能的状态可配置定时器(SCTimer/PWM)、一个RTC/报警定时器、一个24位多速率定时器(MRT)、重复中断定时器(RIT)、窗口看门狗定时器(WWDT)、四个USART、两个SPI、三个带有高速从模式的超快速模式I2C总线接口和一个12位5.0 Msamples/s ADC。Cortex-M0+协处理器可提供高达100 MHz的性能,具有简单指令集和缩减的代码大小。在LPC5410x中, Cortex-M0协处理器硬件乘法器是作为32周期的迭代乘法器来实现的。 不过需要区别的是有两种封装LPC54114J256BD64和LPC54114J256UK49两种封装,这里的是BD64的封装。 2.2 双核说明 ~ARM Cortex-M4内核(r0p1版) ARM Cortex-M4处理器,运行频率高达100 MHz,使用与Cortex-M相同的时钟,浮点运算单元(FPU)和存储器保护单元(MPU)。ARM Cortex-M4内置可嵌套向量中断控制器(NVIC)。非屏蔽中断(NMI)输入,有多种源可供选择。串行线调试,具有8个断点和4个观察点。包含串行线输出,用于增强调试功能。系统节拍定时器。 ~ARM Cortx-M0+内核(r0p1版) ARM Cortex-M0+处理器,运行频率可高达100 MHz,ARM Cortex-M0+内置可嵌套中断向量控制器(NVIC)。非屏蔽中断(NMI)输入,有多种源可供选择。串行线调试,具有四个中断点和两个观察点。系统节拍定时器。 2.3 芯片资源 ~ 片上存储器: 最高512 KB片上可编程闪存,带闪存加速器和256字节页面擦除和写入功能。总共104 kB的SRAM包括:高达96 kB的连续主SRAM。额外的8 kB SRAM。支持ROM API,闪存在应用编程(IAP)和在系统编程(ISP)。功率控制API。 ~串行接口: 四个USART接口,采用同步模式和32 kHz模式,用于从深度睡眠和掉电模式中唤醒。USART从系统FIFO获得FIFO支持,并共享一个小数波特率发生器。两个SPI接口,每个具有四个从选择和灵活的数据配置。SPI具有来自系统FIFO的FIFO支持。从器件功能可将器件从深度睡眠和掉电模式中唤醒。三个I2C总线接口,支持快速模式和超快速模式,数据速率高达1 Mbit/s,采用多地址识别和监控模式。每个I2C总线接口还支持从器件高速模式(3.4 Mbit/s)。从器件功能可将器件从深度睡眠和掉电模式中唤醒。 ~数字外设: DMA控制器,具有22个通道和20个可编程触发器,能够访问所有存储器和支持DMA的外设。高达50个通用输入/输出(GPIO)针脚。大部分GPIO具有可配置的上拉/下拉电阻,可编程开漏模式,以及输入逆变器。通用IO寄存器位于AHB上,以支持快速存取。DMA支持通用IO端口。最多可以选择8个通用IO (引脚中断)作为边沿敏感(上升沿或下降沿或两者)中断请求或电平敏感(低电平有效或高电平有效)中断请求。此外,可以选择多达8个通用IO使用模式匹配引擎模块来促进布尔表达式和中断生成。两组GPIO中断(GINT)支持基于输入状态逻辑(AND/OR)组合的中断。CRC引擎。 ~定时器: 5个32位标准通用定时器/计数器,其中4个支持多达4个采集输入和4个比较输出、PWM模式和外部计数输入。可选择特定的定时器事件,以生成DMA请求。第5个定时器没有外部引脚连接,可用于内部定时操作。一个具有8个输入(6个外部输入和2个内部输入)和8个输出功能(包括采集和匹配)的状态可配置定时器/PWM (SCT/PWM)。输入和输出可引至或引自外部引脚,内部引至或引自所选外设。在内部,SCT支持10个采集/匹配,13个事件和13个状态。32位实时时钟(RTC),以1 S分辨率在始终开启的电源域内运行。RTC中的定时器可用于唤醒所有低功耗模式(包括深度节电模式),具有1 ms分辨率。多通道多速率24位定时器(MRT),用于在最多4种可编程固定速率下重复生成中断。窗口化看门狗定时器(WWDT)。超低功耗微节拍定时器,通过看门狗振荡器运行,可用于将器件从低功耗模式中唤醒。重复中断定时器(RIT),适合调试时间戳和通用应用。 ~时钟生成: 12 MHz内置RC振荡器。高达25 MHz的外部时钟输入时钟频率。内部低功耗看门狗振荡器(WDOSC),标称频率为500 kHz。32 kHz低功耗RTC振荡器。系统PLL允许CPU以最大CPU速率运行。可通过内部RC振荡器、外部时钟输入CLKIN或RTC振荡器运行。时钟输出功能,可监控内部时钟。用于测量片上和片下时钟信号频率的频率测量单元。 2.4 更多信息 双处理器内核:ARM Cortex-M4和ARM Cortex-M0+。M0+内核的工作频率与M4内核相同。两个内核均可达到最高100 MHz的运行频率。模拟外设:12位12通道模数转换器(ADC),支持5.0 Msamples/s。该ADC支持两个独立的转换序列。单电源(1.62 V至3.6 V)。上电复位(POR)。带独立阈值的掉电检测(BOD),用于中断和强制复位。支持JTAG边界扫描。可用作芯片识别的唯一设备序列号(128位)。工作温度范围为-40 °C至105 °C。提供3.288 x 3.288 mm WLCSP49封装和LQFP64封装。
3. 在了解了芯片之后选择开发工具IDE,按照说明首选KEIL和IAR,不过,更应该走一下新路,所以就用MCUXpressoIDE了。新版的MCUXpressoIDE其实集成了LPC54114,所以可以快速启动开发,不用安装SDK,这也是选择MCUXpressoIDE的原因之一了。
3.1 下载安装MCUXpressoIDE并启动,
选择LPC54114
然后就可以编译,并下载到内存点灯了。
3.2 主要代码是
- <font size="4"><font size="3">int main(void)
- {
- uint32_t port_state = 0;
- /* Define the init structure for the output LED pin*/
- gpio_pin_config_t led_config = {
- kGPIO_DigitalOutput, 0,
- };
- /* Board pin, clock, debug console init */
- /* attach 12 MHz clock to FLEXCOMM0 (debug console) */
- CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);
- /* enable clock for GPIO*/
- CLOCK_EnableClock(kCLOCK_Gpio0);
- CLOCK_EnableClock(kCLOCK_Gpio1);
- BOARD_InitPins();
- BOARD_BootClockFROHF48M();
- BOARD_InitDebugConsole();
- /* Print a note to terminal. */
- PRINTF("\r\n GPIO Driver example\r\n");
- PRINTF("\r\n The LED is taking turns to shine.\r\n");
- /* Init output LED GPIO. */
- GPIO_PinInit(GPIO, APP_BOARD_TEST_GPIO_PORT1, APP_BOARD_TEST_LED1_PIN, &led_config);
- GPIO_WritePinOutput(GPIO, APP_BOARD_TEST_GPIO_PORT1, APP_BOARD_TEST_LED1_PIN, 1);
- GPIO_PinInit(GPIO, APP_BOARD_TEST_GPIO_PORT2, APP_BOARD_TEST_LED2_PIN, &led_config);
- GPIO_WritePinOutput(GPIO, APP_BOARD_TEST_GPIO_PORT2, APP_BOARD_TEST_LED2_PIN, 1);
- GPIO_PinInit(GPIO, APP_BOARD_TEST_GPIO_PORT3, APP_BOARD_TEST_LED3_PIN, &led_config);
- GPIO_WritePinOutput(GPIO, APP_BOARD_TEST_GPIO_PORT3, APP_BOARD_TEST_LED3_PIN, 1);
- GPIO_ClearPinsOutput(GPIO, 1, 1 << APP_BOARD_TEST_LED1_PIN | 1 << APP_BOARD_TEST_LED3_PIN);
- GPIO_SetPinsOutput(GPIO, 1, 1 << APP_BOARD_TEST_LED1_PIN | 1 << APP_BOARD_TEST_LED3_PIN);
- GPIO_ClearPinsOutput(GPIO, 1, 1 << APP_BOARD_TEST_LED3_PIN);
- GPIO_SetPinsOutput(GPIO, 1, 1 << APP_BOARD_TEST_LED3_PIN);
- GPIO_TogglePinsOutput(GPIO, 1, 1 << APP_BOARD_TEST_LED1_PIN | 1 << APP_BOARD_TEST_LED3_PIN);
- GPIO_TogglePinsOutput(GPIO, 1, 1 << APP_BOARD_TEST_LED1_PIN | 1 << APP_BOARD_TEST_LED3_PIN);
- GPIO_TogglePinsOutput(GPIO, 1, 1 << APP_BOARD_TEST_LED1_PIN);
- GPIO_TogglePinsOutput(GPIO, 1, 1 << APP_BOARD_TEST_LED1_PIN);
- GPIO_TogglePinsOutput(GPIO, APP_BOARD_TEST_GPIO_PORT2, 1 << APP_BOARD_TEST_LED2_PIN);
- GPIO_TogglePinsOutput(GPIO, APP_BOARD_TEST_GPIO_PORT2, 1 << APP_BOARD_TEST_LED2_PIN);
- /* Port masking */
- GPIO_SetPortMask(GPIO, APP_BOARD_TEST_GPIO_PORT2, 0x0000ffff);
- GPIO_WriteMPort(GPIO, APP_BOARD_TEST_GPIO_PORT2, 0xffffffff);
- port_state = GPIO_ReadPinsInput(GPIO, 0);
- PRINTF("\r\n Standard port read: %x\r\n", port_state);
- port_state = GPIO_ReadMPort(GPIO, 0);
- PRINTF("\r\n Masked port read: %x\r\n", port_state);
- while (1)
- {
- port_state = GPIO_ReadPinsInput(GPIO, 0);
- PRINTF("\r\n Port state: %x\r\n", port_state);
- if (!(port_state & (1 << APP_SW1_PIN)))
- {
- GPIO_TogglePinsOutput(GPIO, APP_BOARD_TEST_GPIO_PORT2, 1u << APP_BOARD_TEST_LED2_PIN);
- }
- if (!GPIO_ReadPinInput(GPIO, APP_SW1_PORT, APP_SW2_PIN))
- {
- GPIO_TogglePinsOutput(GPIO, APP_BOARD_TEST_GPIO_PORT1, 1u << APP_BOARD_TEST_LED1_PIN);
- }
- delay();
- }
- }</font></font>
复制代码
4、对应于程序,还可以用UART进行交互,如下面的hello world程序,会先输出hello world,然后回传你所输入的文本。主要代码如下:
- ******************************************************************************/
- /*!
- * @brief Main function
- */
- int main(void)
- {
- char ch;
- /* Init board hardware. */
- /* attach 12 MHz clock to FLEXCOMM0 (debug console) */
- CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);
- BOARD_InitPins();
- BOARD_BootClockFROHF48M();
- BOARD_InitDebugConsole();
- PRINTF("hello world.\r\n");
- while (1)
- {
- ch = GETCHAR();
- PUTCHAR(ch);
- }
- }
复制代码
在putty演示的效果如下:
|