1回答

0收藏

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

国民技术N32 MCU 国民技术N32 MCU 6434 人阅读 | 1 人回复 | 2023-09-24

[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灯的亮灭。测试代码如下:
  1. int main(void)
  2. {
  3.     uint32_t ret = 0;
  4.     bsp_init();
  5.     SysTick_Config(128000);
  6.     NVIC_EnableIRQ(SysTick_IRQn);
  7.     time_line_ms = 500;
  8.     while (1)
  9.     {
  10.         if (time_line_ms == 0)
  11.         {
  12.         time_line_ms = 500;
  13.         bsp_led_toggle();
  14.         }
  15.     }
  16. }

  17. void SysTick_Handler(void)
  18. {
  19.     if (time_line_ms > 0)
  20.     {
  21.         time_line_ms--;
  22.     }
  23. }
复制代码
连接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
  1. static void adc_init(void)
  2. {
  3.     GPIO_InitType GPIO_InitStructure;
  4.     ADC_InitType ADC_InitStructure;

  5.     /* Enable peripheral clocks ------------------------------------------------*/
  6.     /* Enable GPIO ADC clock*/
  7.     RCC_AHB_Peripheral_Clock_Enable(RCC_AHB_PERIPH_GPIOA | RCC_AHB_PERIPH_ADC);
  8.     /* RCC_ADCHCLK_DIV16*/
  9.     ADC_Clock_Mode_Config(ADC_CKMOD_AHB, RCC_ADCHCLK_DIV16);
  10.     RCC_ADC_1M_Clock_Config(RCC_ADC1MCLK_SRC_HSE, RCC_ADC1MCLK_DIV8); // selsect HSE as RCC ADC1M CLK Source

  11.     GPIO_Structure_Initialize(&GPIO_InitStructure);
  12.     /* Configure adc input as analog input -------------------------*/
  13.     GPIO_InitStructure.Pin = GPIO_PIN_3 | GPIO_PIN_2;
  14.     GPIO_InitStructure.GPIO_Mode = GPIO_MODE_ANALOG;
  15.     GPIO_Peripheral_Initialize(GPIOA, &GPIO_InitStructure);

  16.     ADC_InitStructure.MultiChEn = DISABLE;
  17.     ADC_InitStructure.ContinueConvEn = DISABLE;
  18.     ADC_InitStructure.ExtTrigSelect = ADC_EXT_TRIGCONV_REGULAR_SWSTRRCH;
  19.     ADC_InitStructure.DatAlign = ADC_DAT_ALIGN_R;
  20.     ADC_InitStructure.ChsNumber = ADC_REGULAR_LEN_1;
  21.     ADC_Initializes(&ADC_InitStructure);
  22.     /* Enable ADC */
  23.     ADC_ON();
  24.     /* Check ADC Ready */
  25.     while (ADC_Flag_Status_Get(ADC_RD_FLAG, ADC_FLAG_AWDG, ADC_FLAG_RDY) == RESET)
  26.         ;
  27.     /* Start ADC1 calibration */
  28.     ADC_Calibration_Operation(ADC_CALIBRATION_ENABLE);
  29.     /* Check the end of ADC1 calibration */
  30.     while (ADC_Calibration_Operation(ADC_CALIBRATION_STS) == SET)
  31.         ;
  32. }
复制代码
main.c
  1. int main(void)
  2. {
  3.     uint32_t ret = 0;
  4.     bsp_init();
  5.     SysTick_Config(128000);
  6.     NVIC_EnableIRQ(SysTick_IRQn);
  7.     time_line_ms = 10;
  8.     while (1)
  9.     {
  10.         if (time_line_ms == 0)
  11.         {
  12.             time_line_ms = 10;
  13.             ret = bsp_adc_data_get(joystick_x_adc_channel);
  14.             joystick_coordinate[0] = ret * 100 / 0xFFF;
  15.             ret = bsp_adc_data_get(joystick_y_adc_channel);
  16.             joystick_coordinate[1] = ret * 100 / 0xFFF;
  17.         }
  18.     }
  19. }

  20. void SysTick_Handler(void)
  21. {
  22.     if (time_line_ms > 0)
  23.     {
  24.         time_line_ms--;
  25.     }
  26. }
复制代码
观察结果:

  通过手拨动摇杆,可以看到ADC通过分压电阻采集到了对应的电压值。上图中,我将数值做了百分比化,其在初始状态为“居中”,可以看到采样值在0x30附近,即50%。随着摇杆或上推,或下拉,数值也在0-100%之间变化。

后记
本次浅浅地试用了国民技术N32G430C8芯片,其性能已经远超cortex-M3系列的MCU。无论是在物联网应用上面的小模块,亦或是电源应用的主控芯片,其均能很好的胜任。高主频下带来的强处理能力,必会抢夺大部分原Cortex-M3的市场。
在天猫国民技术旗舰店里N32G430C8零售价为3.20元(含税),我估计如果批量采购的话,价格应该还会有优惠。如此强劲的Cortex-M4内核的MCU,在这个价格下面,你还会选择M3的产品吗?反正我不会!



分享到:
回复

使用道具 举报

回答|共 1 个

倒序浏览

沙发

eefocus_3913743

发表于 2023-12-21 11:29:49 | 只看该作者

射频前端芯片设计原厂三伍微电子的产品有WIFI FEM、IOT FEM、PA和开关。
产品优势
FEM优势:(1)谐波好,免去外置滤波器,(2)无需调试匹配电路,直接替换。
开关优势:低插损,低延时,高频率(支持7.2GHz)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条