[N32G430试用报告]用过N32G430,你还会考虑Cortex-M0的MCU吗?
N32G430初识
最近一起关注着Nation国民技术公司的通用MCU,我的主要目的就是用于国产化MCU的方案替代。2023年3月国民技术的N32G430系列荣获年度最佳MCU。我也是在那时开始注意这颗物料。
N32G430概述
N32G430是一颗通用MCU,基于ARM公司Cortex-M4F内核。具有以下特性:
- 工作主频最高达128MHz
- 集成高达64KB的片内加密存储Flash
- 支持多用户分区权限管理,最大16KB的嵌入式SRAM
- 内置一个内部高速AHB总线,两个低速外设时钟总线APB及总线矩阵
- 最多支持40个可复用I/Os,提供丰富的高性能模拟接口,包括1个12位4.7Msps ADC,最多支持16个外部输入通道和3个内部通道
- 提供多种数字通信接口,包括4个UART、2个I2C、2个SPI/I2S、1个CAN 2.0B通信接口
N32G430的优势
与某32F103相比,N32G430的ADC采样速率已经高达4.7Msps,而且内置了3个高速比较器。简单点说,没有增加MCU成本,却减少了物料,缩小了PCB面积。经济上就得到了老板与销售的好评;N32G430片上又集成了多路互补PWM输出,保留了CAN 2.0外设接口,对于我的DC/DC模块化电源设计简直就是绝配。
N32G430开箱
包装拿在手中非常厚实。不用担心快递的暴力分拣。打开包装,在防静电袋中躺着的便是今天的主角——国民技术N32G430C8L7。一颗有128MHz主频,片上64KB Flash,16KB RAM的Cortex-M4F内核的MCU。
主芯片N32G430C8的48个引脚,除少量引脚用于LED灯与按键外,其余功能引脚全部以插针的方式引出。对我们原型开发前方案验证非常友好!
板载还自带了国民技术的NS-Link调试器,提供了在线JTAG调试与虚拟串口功能。多种角度方便工程师们试用与评估。
Keil开发环境与Blinky闪灯
keil开发环境
国民技术官方对于Keil提供了器件包的加载方案,通过FTP下来.pack包后,自行导入到keil里面即可。导入成功后,我们便可以在选项页里面选择N32G430C8芯片了。
另:看新闻,国民技术与IAR达成了战略关系,N32芯片将在新版本的IAR环境下直接支持。估计Keil环境下直接安装N32的pack也不远了。
blinky闪灯
我们编写一个简单的示例程序来验证一下开发环境。也验证一下开发板的硬件与调试环境。我们将PA1引脚配置为输出模式,控制其输出高低电平,观察LED灯的亮灭。测试代码如下:
- int main(void)
- {
- uint32_t ret = 0;
- bsp_init();
- SysTick_Config(128000);
- NVIC_EnableIRQ(SysTick_IRQn);
- time_line_ms = 500;
- while (1)
- {
- if (time_line_ms == 0)
- {
- time_line_ms = 500;
- bsp_led_toggle();
- }
- }
- }
- void SysTick_Handler(void)
- {
- if (time_line_ms > 0)
- {
- time_line_ms--;
- }
- }
复制代码 连接USB线,下载,观察板上LED的亮灭。
高性能ADC采样测试
国民技术N32G430C8芯片集成了高性能ADC模-数转换外设,12位SAR型ADC及接近5Msps采样速率,支持多种工作模式, 能满足大多数模数转换应用场景。
N32 ADC 正常工作需要配置 3 种时钟,其分别为工作时钟、采样时钟和计时时钟。工作时钟仅可配置为HCLK,采样时钟我们这里也使用AHB_CLK做为采样时钟源。计时时钟,我们使用HSE为源,进行8分频得到1MHz。
配置完成时钟,我们还需要启动ADC外设中的“ADC数字校准模块”,其用于测量和校正 ADC 的偏移电压,校准过程通过内部连接,对理想的“0”电压进行采样,计算出 offset,在正常工作时就可以去除 offset 电压。
下面为我使用ADC模块采样摇杆位置状态的流程图:
源代码如下:
bsp.c
- static void adc_init(void)
- {
- GPIO_InitType GPIO_InitStructure;
- ADC_InitType ADC_InitStructure;
- /* Enable peripheral clocks ------------------------------------------------*/
- /* Enable GPIO ADC clock*/
- RCC_AHB_Peripheral_Clock_Enable(RCC_AHB_PERIPH_GPIOA | RCC_AHB_PERIPH_ADC);
- /* RCC_ADCHCLK_DIV16*/
- ADC_Clock_Mode_Config(ADC_CKMOD_AHB, RCC_ADCHCLK_DIV16);
- RCC_ADC_1M_Clock_Config(RCC_ADC1MCLK_SRC_HSE, RCC_ADC1MCLK_DIV8); // selsect HSE as RCC ADC1M CLK Source
- GPIO_Structure_Initialize(&GPIO_InitStructure);
- /* Configure adc input as analog input -------------------------*/
- GPIO_InitStructure.Pin = GPIO_PIN_3 | GPIO_PIN_2;
- GPIO_InitStructure.GPIO_Mode = GPIO_MODE_ANALOG;
- GPIO_Peripheral_Initialize(GPIOA, &GPIO_InitStructure);
- ADC_InitStructure.MultiChEn = DISABLE;
- ADC_InitStructure.ContinueConvEn = DISABLE;
- ADC_InitStructure.ExtTrigSelect = ADC_EXT_TRIGCONV_REGULAR_SWSTRRCH;
- ADC_InitStructure.DatAlign = ADC_DAT_ALIGN_R;
- ADC_InitStructure.ChsNumber = ADC_REGULAR_LEN_1;
- ADC_Initializes(&ADC_InitStructure);
- /* Enable ADC */
- ADC_ON();
- /* Check ADC Ready */
- while (ADC_Flag_Status_Get(ADC_RD_FLAG, ADC_FLAG_AWDG, ADC_FLAG_RDY) == RESET)
- ;
- /* Start ADC1 calibration */
- ADC_Calibration_Operation(ADC_CALIBRATION_ENABLE);
- /* Check the end of ADC1 calibration */
- while (ADC_Calibration_Operation(ADC_CALIBRATION_STS) == SET)
- ;
- }
复制代码 main.c
- int main(void)
- {
- uint32_t ret = 0;
- bsp_init();
- SysTick_Config(128000);
- NVIC_EnableIRQ(SysTick_IRQn);
- time_line_ms = 10;
- while (1)
- {
- if (time_line_ms == 0)
- {
- time_line_ms = 10;
- ret = bsp_adc_data_get(joystick_x_adc_channel);
- joystick_coordinate[0] = ret * 100 / 0xFFF;
- ret = bsp_adc_data_get(joystick_y_adc_channel);
- joystick_coordinate[1] = ret * 100 / 0xFFF;
- }
- }
- }
- void SysTick_Handler(void)
- {
- if (time_line_ms > 0)
- {
- time_line_ms--;
- }
- }
复制代码 观察结果:
通过手拨动摇杆,可以看到ADC通过分压电阻采集到了对应的电压值。上图中,我将数值做了百分比化,其在初始状态为“居中”,可以看到采样值在0x30附近,即50%。随着摇杆或上推,或下拉,数值也在0-100%之间变化。
后记
本次浅浅地试用了国民技术N32G430C8芯片,其性能已经远超cortex-M3系列的MCU。无论是在物联网应用上面的小模块,亦或是电源应用的主控芯片,其均能很好的胜任。高主频下带来的强处理能力,必会抢夺大部分原Cortex-M3的市场。
在天猫国民技术旗舰店里N32G430C8零售价为3.20元(含税),我估计如果批量采购的话,价格应该还会有优惠。如此强劲的Cortex-M4内核的MCU,在这个价格下面,你还会选择M3的产品吗?反正我不会!
|