1.开箱
春节前夕,收到了板载国民技术车规MCU的N32A455开发板!一块开发板、一根MiniUSB数据线……
2.准备工作
2.1.下载开发资料:
- 通过ftp://download.nationstech.com下载开发板相关资料:ftp://download.nationstech.com/2-Automotive-Grade MCU/下的N32A455xx_V1.2.0.zip
- 通过https://www.nationstech.com/zlxz455/官网去下载相应资料,
- 通过测评活动链接,下载官方提供的资料
- 额……还是建议到FTP服务器去下载,更新比较及时,官网上当前能下载到版本为1.1版本,FTP服务器最新版本为1.2
2.2.安装KEIL集成开发环境芯片支持包
在N32A455xx_V1.2.0\6-Software Development Kit目录下,双击Nationstech.N32A455_DFP.1.0.0.pack进行安装:
3.熟悉板载功能
我们这次测评的开发板型号为N32A455VEL7-EVB,所以对应的是N32A455xx_V1.2.0\5-Hardware Evaulation Board\N32A455VEL7-EVB_V1.1目录下的N32A455VEL7-EVB_V1.1.pdf原理图,通过N32A455VEL7-EVB开发板硬件使用指南,获知开发板功能如下:
- 开发板供电方式:通过DC插口供12V电源、通过MiniUSB接口供5V电源
- 板载NSLINK程序下载调试工具,支持JTAG和SWD两种连接方式,同时还带有一路虚拟串口
- 支持2路CAN和2路LIN
- 支持TF卡,SDIO接口
- 板载VS1053B音频电路
- 板载EEPROM
- 板载SPI FLASH和QSPI FLASH
- 板载5个机械按键,1个复位按键、1个唤醒按键、3个功能按键
- 板载三色LED灯、ADC功能的可调电阻
- 芯片的所有引脚都通过排针全部引出
4.基础工程
官方的示例程序存放在N32A455xx_V1.2.0\6-Software Development Kit\Nationstech.N32A455_Library.1.1.0目录下,firmware文件夹中存放的是驱动库程序,projects\n32a455_EVAL文件夹下存放的是基于开发板的示例程序。我们参考examples\GPIO\LedBlink示例程序、examples\GPIO\LedBlink示例程序、examples\USART\Printf示例程序,来创建一个新的基础工程。
4.1.创建工程:工程名->选择芯片型号->OK
4.2.添加工程源码:启动程序、CMSIS、驱动库、用户程序
4.3.配置工程
4.4.编写程序
#ifndef __MAIN_H__
#define __MAIN_H__
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
#include <stdio.h>
#include "n32a455.h"
/* PA11_RLED */
#define RLED_RCC RCC_APB2_PERIPH_GPIOA
#define RLED_GPIO GPIOA
#define RLED_PIN GPIO_PIN_11
/* PB10_BLED */
#define BLED_RCC RCC_APB2_PERIPH_GPIOB
#define BLED_GPIO GPIOB
#define BLED_PIN GPIO_PIN_10
/* PA12_GLED */
#define GLED_RCC RCC_APB2_PERIPH_GPIOA
#define GLED_GPIO GPIOA
#define GLED_PIN GPIO_PIN_12
/* PD12_KEY */
#define S3_RCC RCC_APB2_PERIPH_GPIOD
#define S3_GPIO GPIOD
#define S3_PIN GPIO_PIN_12
/* PC6_KEY */
#define S4_RCC RCC_APB2_PERIPH_GPIOC
#define S4_GPIO GPIOC
#define S4_PIN GPIO_PIN_6
/* PC7_KEY */
#define S5_RCC RCC_APB2_PERIPH_GPIOC
#define S5_GPIO GPIOC
#define S5_PIN GPIO_PIN_7
#ifdef __cplusplus
}
#endif
#endif
#include "main.h"
void LED_Init(void)
{
GPIO_InitType GPIO_InitStructure;
RCC_EnableAPB2PeriphClk(RLED_RCC, ENABLE);
GPIO_InitStruct(&GPIO_InitStructure);
GPIO_InitStructure.Pin = RLED_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitPeripheral(RLED_GPIO, &GPIO_InitStructure);
GPIO_WriteBit(RLED_GPIO, RLED_PIN, Bit_SET);
RCC_EnableAPB2PeriphClk(BLED_RCC, ENABLE);
GPIO_InitStruct(&GPIO_InitStructure);
GPIO_InitStructure.Pin = BLED_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitPeripheral(BLED_GPIO, &GPIO_InitStructure);
GPIO_WriteBit(BLED_GPIO, BLED_PIN, Bit_SET);
RCC_EnableAPB2PeriphClk(GLED_RCC, ENABLE);
GPIO_InitStruct(&GPIO_InitStructure);
GPIO_InitStructure.Pin = GLED_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitPeripheral(GLED_GPIO, &GPIO_InitStructure);
GPIO_WriteBit(GLED_GPIO, GLED_PIN, Bit_SET);
}
void LED_ON(GPIO_Module *GPIOn, uint16_t PINn)
{
GPIO_WriteBit(GPIOn, PINn, Bit_RESET);
}
void LED_OFF(GPIO_Module *GPIOn, uint16_t PINn)
{
GPIO_WriteBit(GPIOn, PINn, Bit_SET);
}
void LED_Toggle(GPIO_Module *GPIOn, uint16_t PINn)
{
if (GPIO_ReadOutputDataBit(GPIOn, PINn) == Bit_RESET)
{
GPIO_WriteBit(GPIOn, PINn, Bit_SET);
}
else
{
GPIO_WriteBit(GPIOn, PINn, Bit_RESET);
}
}
void KEY_Init(void)
{
GPIO_InitType GPIO_InitStructure;
RCC_EnableAPB2PeriphClk(S3_RCC, ENABLE);
GPIO_InitStruct(&GPIO_InitStructure);
GPIO_InitStructure.Pin = S3_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitPeripheral(S3_GPIO, &GPIO_InitStructure);
RCC_EnableAPB2PeriphClk(S4_RCC, ENABLE);
GPIO_InitStruct(&GPIO_InitStructure);
GPIO_InitStructure.Pin = S4_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitPeripheral(S4_GPIO, &GPIO_InitStructure);
RCC_EnableAPB2PeriphClk(S5_RCC, ENABLE);
GPIO_InitStruct(&GPIO_InitStructure);
GPIO_InitStructure.Pin = S5_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitPeripheral(S5_GPIO, &GPIO_InitStructure);
}
void USART_Configuration(void)
{
GPIO_InitType GPIO_InitStructure;
USART_InitType USART_InitStructure;
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA | RCC_APB2_PERIPH_AFIO, ENABLE);
GPIO_InitStruct(&GPIO_InitStructure);
GPIO_InitStructure.Pin = GPIO_PIN_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_USART1, ENABLE);
USART_StructInit(&USART_InitStructure);
USART_InitStructure.BaudRate = 115200;
USART_InitStructure.WordLength = USART_WL_8B;
USART_InitStructure.StopBits = USART_STPB_1;
USART_InitStructure.Parity = USART_PE_NO;
USART_InitStructure.Mode = USART_MODE_TX;
USART_InitStructure.HardwareFlowControl = USART_HFCTRL_NONE;
USART_Init(USART1, &USART_InitStructure);
USART_Enable(USART1, ENABLE);
}
int main(void)
{
LED_Init();
KEY_Init();
USART_Configuration();
printf("\r\nN32A455VEL7-EVB V1.1 %s %s", __DATE__, __TIME__);
while (1)
{
GPIO_WriteBit(RLED_GPIO, RLED_PIN, GPIO_ReadInputDataBit(S3_GPIO, S3_PIN));
GPIO_WriteBit(BLED_GPIO, BLED_PIN, GPIO_ReadInputDataBit(S4_GPIO, S4_PIN));
GPIO_WriteBit(GLED_GPIO, GLED_PIN, GPIO_ReadInputDataBit(S5_GPIO, S5_PIN));
}
}
int fputc(int ch, FILE* f)
{
USART_SendData(USART1, (uint8_t)ch);
while (USART_GetFlagStatus(USART1, USART_FLAG_TXDE) == RESET);
return (ch);
}
5.编译、运行
5.1.打印输出
5.2.运行视频
15
6.附件