jobszheng5 发表于 2023-9-24 16:06:38

[N32G430试用报告]用过N32G430,你还会考虑Cortex-M0的MCU吗?

用过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 = ret * 100 / 0xFFF;
            ret = bsp_adc_data_get(joystick_y_adc_channel);
            joystick_coordinate = 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的产品吗?反正我不会!



eefocus_3913743 发表于 2023-12-21 11:29:49

射频前端芯片设计原厂三伍微电子的产品有WIFI FEM、IOT FEM、PA和开关。
产品优势
FEM优势:(1)谐波好,免去外置滤波器,(2)无需调试匹配电路,直接替换。
开关优势:低插损,低延时,高频率(支持7.2GHz)
页: [1]
查看完整版本: [N32G430试用报告]用过N32G430,你还会考虑Cortex-M0的MCU吗?