[N32G45x] N32G45xGPIO,串口,主频测试

[复制链接]
 楼主| abner_ma 发表于 2022-3-11 18:55 | 显示全部楼层 |阅读模式
   国民技术MCU特点:
  1 具有较高的安全性    目前市面上普遍的MCU皆采用ARM Cortex-M系列的架构,此架构本身并没有附带安全保护机制。ARM推出新一代安全微控制器加构Cortex-M23和Cortex-M33ST也针对物联网安全提供了一系列的STSAFF解决方案。国民技术“通用MCU+安全”
  2 内置高速密码算法内核
   高达 512KByte 片内 Flash,支持加密存储、 多用户分区管理及数据保护,支持硬件 ECC 校验, 10万次擦写次数, 10 年数据保持144KByte 片内 SRAM(包含  16KByte Retention RAM), Retention RAM 支持硬件奇偶校验
  3 高性能下的低功耗技术
  4 较高的集成度,外设丰富


     N32G457系列采用 32 bit ARM Cortex-M4F内核,最高工作主频144MHz,支持浮点运算和DSP指令,集成多达512KB Flash、 144KB SRAM、 4x12bit 5Msps ADC、 4xOPAMP、 7xCOMP、 2x1Msps 12bDAC,支持多达24通道电容式触摸按键,集成多路U(S)ART、 I2C、 SPI、 QSPI、 USB、 CAN通信接口, 1xSDIO接口, 1x10/100M以太网接口,数字摄像头( DVP) 接口,内置密码算法硬件加速引擎。
   GPIO测试:
  1. void LedInit(GPIO_Module* GPIOx, uint16_t Pin)
  2. {
  3.     GPIO_InitType GPIO_InitStructure;

  4.     /* Check the parameters */
  5.     assert_param(IS_GPIO_ALL_PERIPH(GPIOx));

  6.     /* Enable the GPIO Clock */
  7.     if (GPIOx == GPIOA)
  8.     {
  9.         RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA, ENABLE);
  10.     }
  11.     else if (GPIOx == GPIOB)
  12.     {
  13.         RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOB, ENABLE);
  14.     }
  15.     else if (GPIOx == GPIOC)
  16.     {
  17.         RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOC, ENABLE);
  18.     }
  19.     else if (GPIOx == GPIOD)
  20.     {
  21.         RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOD, ENABLE);
  22.     }
  23.     else if (GPIOx == GPIOE)
  24.     {
  25.         RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOE, ENABLE);
  26.     }
  27.     else if (GPIOx == GPIOF)
  28.     {
  29.         RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOF, ENABLE);
  30.     }
  31.     else
  32.     {
  33.         if (GPIOx == GPIOG)
  34.         {
  35.             RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOG, ENABLE);
  36.         }
  37.     }

  38.     /* Configure the GPIO pin */
  39.     if (Pin <= GPIO_PIN_ALL)
  40.     {
  41.         GPIO_InitStructure.Pin        = Pin;
  42.         GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
  43.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  44.         GPIO_InitPeripheral(GPIOx, &GPIO_InitStructure);
  45.     }
  46. }

  47. void LedBlink(GPIO_Module* GPIOx, uint16_t Pin)
  48. {
  49.     GPIOx->POD ^= Pin;
  50. }
1.png

   
      国民技术N32G43X串口打印功能,支持printf函数,而不需要选择use MicroLIB。
  1. /* System Clocks Configuration */
  2.     RCC_Configuration();

  3.     /* Configure the GPIO ports */
  4.     GPIO_Configuration();

  5.     /* USARTy and USARTz configuration ------------------------------------------------------*/
  6.     USART_InitStructure.BaudRate            = 115200;
  7.     USART_InitStructure.WordLength          = USART_WL_8B;
  8.     USART_InitStructure.StopBits            = USART_STPB_1;
  9.     USART_InitStructure.Parity              = USART_PE_NO;
  10.     USART_InitStructure.HardwareFlowControl = USART_HFCTRL_NONE;
  11.     USART_InitStructure.Mode                = USART_MODE_RX | USART_MODE_TX;

  12.     /* Configure USARTx */
  13.     USART_Init(USARTx, &USART_InitStructure);
  14.     /* Enable the USARTx */
  15.     USART_Enable(USARTx, ENABLE);


感谢二姨家送的开发板! QQ截图20220311181141.png

时钟分析:
― HSE: 4MHz~32MHz 外部高速晶体
― LSE: 32.768KHz 外部低速晶体
― HSI: 内部高速 RC OSC 8MHz
― LSI: 内部低速 RC OSC 40KHz
― 内置高速 PLL
― 支持 1 路时钟输出,可配置系统时钟、 HSE、 HSI 或 PLL 后分频输出
  1. typedef struct
  2. {
  3.     uint32_t SysclkFreq;    /*!< returns SYSCLK clock frequency expressed in Hz */
  4.     uint32_t HclkFreq;      /*!< returns HCLK clock frequency expressed in Hz */
  5.     uint32_t Pclk1Freq;     /*!< returns PCLK1 clock frequency expressed in Hz */
  6.     uint32_t Pclk2Freq;     /*!< returns PCLK2 clock frequency expressed in Hz */
  7.     uint32_t AdcPllClkFreq; /*!< returns ADCPLLCLK clock frequency expressed in Hz */
  8.     uint32_t AdcHclkFreq;   /*!< returns ADCHCLK clock frequency expressed in Hz */
  9. } RCC_ClocksType;
获得主频函数:在n32g45x_rcc.c
  1. void RCC_GetClocksFreqValue(RCC_ClocksType* RCC_Clocks)
  2. {
  3.     uint32_t tmp = 0, pllclk = 0, pllmull = 0, pllsource = 0, presc = 0;

  4.     /* Get PLL clock source and multiplication factor ----------------------*/
  5.     pllmull   = RCC->CFG & CFG_PLLMULFCT_MASK;
  6.     pllsource = RCC->CFG & CFG_PLLSRC_MASK;

  7.     if ((pllmull & RCC_CFG_PLLMULFCT_4) == 0)
  8.     {
  9.         pllmull = (pllmull >> 18) + 2; // PLLMUL[4]=0
  10.     }
  11.     else
  12.     {
  13.         pllmull = ((pllmull >> 18) - 496) + 1; // PLLMUL[4]=1
  14.     }

  15.     if (pllsource == 0x00)
  16.     { /* HSI oscillator clock divided by 2 selected as PLL clock entry */
  17.         pllclk = (HSI_VALUE >> 1) * pllmull;
  18.     }
  19.     else
  20.     {
  21.         /* HSE selected as PLL clock entry */
  22.         if ((RCC->CFG & CFG_PLLHSEPRES_MASK) != (uint32_t)RESET)
  23.         { /* HSE oscillator clock divided by 2 */
  24.             pllclk = (HSE_VALUE >> 1) * pllmull;
  25.         }
  26.         else
  27.         {
  28.             pllclk = HSE_VALUE * pllmull;
  29.         }
  30.     }

  31.     /* Get SYSCLK source -------------------------------------------------------*/
  32.     tmp = RCC->CFG & CFG_SCLKSTS_MASK;

  33.     switch (tmp)
  34.     {
  35.     case 0x00: /* HSI used as system clock */
  36.         RCC_Clocks->SysclkFreq = HSI_VALUE;
  37.         break;
  38.     case 0x04: /* HSE used as system clock */
  39.         RCC_Clocks->SysclkFreq = HSE_VALUE;
  40.         break;
  41.     case 0x08: /* PLL used as system clock */
  42.         RCC_Clocks->SysclkFreq = pllclk;
  43.         break;

  44.     default:
  45.         RCC_Clocks->SysclkFreq = HSI_VALUE;
  46.         break;
  47.     }

  48.     /* Compute HCLK, PCLK1, PCLK2 and ADCCLK clocks frequencies ----------------*/
  49.     /* Get HCLK prescaler */
  50.     tmp   = RCC->CFG & CFG_AHBPRES_SET_MASK;
  51.     tmp   = tmp >> 4;
  52.     presc = s_ApbAhbPresTable[tmp];
  53.     /* HCLK clock frequency */
  54.     RCC_Clocks->HclkFreq = RCC_Clocks->SysclkFreq >> presc;
  55.     /* Get PCLK1 prescaler */
  56.     tmp   = RCC->CFG & CFG_APB1PRES_SET_MASK;
  57.     tmp   = tmp >> 8;
  58.     presc = s_ApbAhbPresTable[tmp];
  59.     /* PCLK1 clock frequency */
  60.     RCC_Clocks->Pclk1Freq = RCC_Clocks->HclkFreq >> presc;
  61.     /* Get PCLK2 prescaler */
  62.     tmp   = RCC->CFG & CFG_APB2PRES_SET_MASK;
  63.     tmp   = tmp >> 11;
  64.     presc = s_ApbAhbPresTable[tmp];
  65.     /* PCLK2 clock frequency */
  66.     RCC_Clocks->Pclk2Freq = RCC_Clocks->HclkFreq >> presc;

  67.     /* Get ADCHCLK prescaler */
  68.     tmp   = RCC->CFG2 & CFG2_ADCHPRES_SET_MASK;
  69.     presc = s_AdcHclkPresTable[tmp];
  70.     /* ADCHCLK clock frequency */
  71.     RCC_Clocks->AdcHclkFreq = RCC_Clocks->HclkFreq / presc;
  72.     /* Get ADCPLLCLK prescaler */
  73.     tmp   = RCC->CFG2 & CFG2_ADCPLLPRES_SET_MASK;
  74.     tmp   = tmp >> 4;
  75.     presc = s_AdcPllClkPresTable[(tmp & 0xF)]; // ignore BIT5
  76.     /* ADCPLLCLK clock frequency */
  77.     RCC_Clocks->AdcPllClkFreq = pllclk / presc;
  78. }
打印:

2.png
显示主频始终144M,666

七毛钱 发表于 2022-3-15 14:57 来自手机 | 显示全部楼层
国民技术给力啊,申请到开发板的人很多了
七毛钱 发表于 2022-3-17 11:04 来自手机 | 显示全部楼层
听说北京冬奥会都用到国民技术的芯片了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:项目经理
简介:资深嵌入式开发工程师

95

主题

181

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部
认证:项目经理
简介:资深嵌入式开发工程师

95

主题

181

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部