拿到M471板子已经3天了,今天有空,来开下箱~
还是一如既往的风格,没啥好说的,新唐板子用料一向是舍得的,板上晶振啥的都没有缺省~
然后我们开始下载资料,我们用MDK开发:
下载网址(蛋,找了好久,新唐的网站后缀加cn和不加cn还不同,不加cn面向整个国际,资料更全。
我之前在cn的网站,找了半天就是没有M471的资料~有些无语)
http://www.nuvoton.com.cn/board/numaker-m471ki/?index=2
介绍挺全的,快速上手指导首次也有。
DS_M471V_M471K_Series_EN_Rev1.20.pdf
(3.1 MB)
TRM_M471V_M471K_Series_EN_Rev1.20.pdf
(8.41 MB)
UM_NuMaker-M471KI_EN_Rev1.00.pdf
(5.74 MB)
软件部分的MDK支持包和BSP太大,大家自己去下载啊。
装好
,解压好BSP:
开发环境大家好,我们下面就可以写个简单的测试代码了:
我们打开BSP里面的例程,选个最简的例程,进行修改:
打开:
结构很清爽,没有任何第三方的库及集中写在一起的板子资源的文件,对初学者非常友好。
新唐的MCU最大的特点就是GPIO,仍保持C51的一些特性,譬如准双向等,位操作等,用过51转新唐
上手速度绝对比ST的要快。可惜新唐的推广力度不足,加上一些用户反映的BUG的处理能力不是很及时及
工业恶劣环境的不稳定性都拖了后腿。
我们看板上有LED,KEY,USART,我们就用这几个外设写个小程序。
我们先看下硬件连接图:
串口的对应引脚(USART0):
LED的对应引脚:
KEY的对应引脚:
我们对打开的简单例程进行修改:
main.c
/**************************************************************************//**
* [url=home.php?mod=space&uid=288409]@file[/url] main.c
* [url=home.php?mod=space&uid=895143]@version[/url] V3.00
* [url=home.php?mod=space&uid=247401]@brief[/url] Show how to set GPIO pin mode and use pin data input/output control.
*
* SPDX-License-Identifier: Apache-2.0
* [url=home.php?mod=space&uid=17282]@CopyRight[/url] (C) 2020 Nuvoton Technology Corp. All rights reserved.
******************************************************************************/
#include "stdio.h"
#include "NuMicro.h"
void SYS_Init(void)
{
/* Unlock protected registers */
SYS_UnlockReg();
/* Set XT1_OUT(PF.2) and XT1_IN(PF.3) to input mode */
PF->MODE &= ~(GPIO_MODE_MODE2_Msk | GPIO_MODE_MODE3_Msk);
/* Enable HIRC clock (Internal RC 48 MHz) */
CLK_EnableXtalRC(CLK_PWRCTL_HIRCEN_Msk);
/* Wait for HIRC clock ready */
CLK_WaitClockReady(CLK_STATUS_HIRCSTB_Msk);
/* Set core clock as 96MHz from PLL */
CLK_SetCoreClock(FREQ_96MHZ);
/* Set PCLK0/PCLK1 to HCLK/2 */
CLK->PCLKDIV = (CLK_PCLKDIV_APB0DIV_DIV2 | CLK_PCLKDIV_APB1DIV_DIV2);
/* Enable UART clock */
CLK_EnableModuleClock(UART0_MODULE);
/* Select UART clock source from HIRC */
CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART0SEL_HIRC, CLK_CLKDIV0_UART0(1));
/* Update System Core Clock */
/* User can use SystemCoreClockUpdate() to calculate SystemCoreClock. */
SystemCoreClockUpdate();
/*----------------------------------------------------------------------*/
/* Init I/O Multi-function */
/*----------------------------------------------------------------------*/
/* Set GPB multi-function pins for UART0 RXD and TXD */
SYS->GPB_MFPH = (SYS->GPB_MFPH & ~(SYS_GPB_MFPH_PB12MFP_Msk | SYS_GPB_MFPH_PB13MFP_Msk)) |
(SYS_GPB_MFPH_PB12MFP_UART0_RXD | SYS_GPB_MFPH_PB13MFP_UART0_TXD);
/* Lock protected registers */
SYS_LockReg();
}
/*----------------------------------------------------------------------*/
/* Init UART0 */
/*----------------------------------------------------------------------*/
void UART0_Init(void)
{
/* Reset UART0 */
SYS_ResetModule(UART0_RST);
/* Configure UART0 and set UART0 baud rate */
UART_Open(UART0, 115200);
}
/*----------------------------------------------------------------------*/
/* Init LED0 PB14 */
/*----------------------------------------------------------------------*/
#define LED0 PB14
void LED_Init(void)
{
/* Configure PB.14 as Output mode */
GPIO_SetMode(PB, BIT14, GPIO_MODE_OUTPUT);
/* Set PB.14 output pin value is low */
PB14 = 0;
}
/*----------------------------------------------------------------------*/
/* Init KEY0 PH4 */
/*----------------------------------------------------------------------*/
#define KEY0 PH4
void KEY_Init(void)
{
/* Configure PH.4 as Input mode */
GPIO_SetMode(PH, BIT4, GPIO_MODE_INPUT);
/* Set PB.14 output pin value is HIGH */
PH4 = 1;
}
int32_t main(void)
{
/* Init System, IP clock and multi-function I/O. */
SYS_Init();
LED_Init();
KEY_Init();
/* Init UART0 for printf */
UART0_Init();
printf("\n\nCPU [url=home.php?mod=space&uid=72445]@[/url] %dHz\n", SystemCoreClock);
while(1)
{
if(KEY0==0)
{
while(KEY0==0){};
LED0=~LED0;
(LED0>0)?printf("LED1 STA IS HIGHT !\r\n"):printf("LED1 STA IS LOW!\r\n");
}
}
}
编译下载,查看串口输出,按下KEY,LED切换一个状态:
LED切换状态:
好了,开箱帖就到这了~~
|