打印
[N32G45x]

【N32G45XVL-STB_V1.1】开发板评测1:环境配置,串口输出

[复制链接]
1446|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 zhanzr21 于 2022-1-30 15:20 编辑

先絮叨几句.

看到群里分享的国民技术开发板评测活动, 马上申请了, 第二天打电话我说要发快递, 第三天收到板子. 整个流程很有效率.

个人对这家公司有一定了解, 五六年前就用过国民的芯片. 那时候记得拿到的国民的开发板上都有ZTE字样, 这是因为国民技术本身就是中兴拆分出来的子公司. 至于为啥要拆分出来, 这个则是没有关注过.

这家公司之前的主要产品是安全芯片, 也就是银**/U盾/POS机/门禁卡/公交卡/员工卡/加密货币钱包上的芯片. 这种芯片其实也是通用MCU定制化而来的. 所以能做这种芯片, 再做通用MCU是比较顺理成章的产品范围扩展.
就这么多废话了, 个人比较关注芯片上的安全加速单元, 这块在通用芯片上其实应用还是挺广泛的, 尤其是目前这种环境, IoT设备安全越来越被用户和开发者关注. 不过第一帖还是写基本的. 毕竟开发生态的完善也是MCU产品能否被工程师们应用产品上的重要的因素. 目前国外的产品STM32, Microchip, TI这些做的比较好, 根据我的目前的使用经验, 国民MCU还有不少地方要努力.

先上几张图吧.






板子是那种简单的最小评估板的造型, 这个没关系, 够用就好, 带有板载DAP调试器(有虚拟串口). 还有几个LED,按钮, 引脚也都用排针引出来了.
最让人有点无语的是 MiniUSB的接口, 有点槽点. 不过这都是小事, 反正佩带了一根MiniUSB线, 不然真得翻箱倒柜找这线缆了.
国民技术的工程师在微信群里分享了不少资料, 基本上是比较齐全, 虽然个人觉得有点杂乱.

现在开始来开发吧.

第一步, 安装驱动

上文已经说过, 这板子自带DAP调试器, 有些同学对它不是很了解, 这个其实是ARM公司的一个公版调试器的改版. 用起来跟Ulink2比较接近. 速度是慢点, 不过基本操作完全够用. 官方给的文档中还有驱动安装手册. 本人的Windows 10机器插上就识别了,包括DAP和串口. 所以根本也没有装过驱动.


设备与打印机中, 如果看到上述界面, 说明驱动已经OK.

第二步, 安装Keil Device Pack

本人是使用Keil MDK5进行开发, 官方提供的软件包也能用于其它开发环境, 这里先只说Keil的情况.
找到这个文件:
Nationstech.N32G45x_DFP.1.0.4.pack
导入到Keil的package installer

导入后就可以直接用Keil新建基于N32G45x系列的工程了.
但是这里有个小坑.
如果你想使用Keil原生的设备驱动管理界面的话, 还需要手工把驱动包拷贝到Keil的包地址中. 因为官方的DFP Pack仅仅安装了芯片的选型参数和Flash下载算法, 没有安装驱动. 这里有点绕, 如果看不明白或者觉得麻烦就算了, 仅仅是个使用习惯上的问题, 不填这个坑后面也是可以开发的.


这里做完了, 就可以直接新建工程了, 当然如果使用官方提供的例程工程直接改也可以, 本人只是使用习惯的不同, 倾向于新建工程而已.

第三步, 新建工程, 单个LED闪烁
选相应的芯片

选择最简单的几个软件Component, 因为现在只需要点灯, 也就是只需要时钟配置, 启动文件, GPIO几个最基础的部分.
之后就是建立最基础的LED点灯源代码, 这里只贴片段, 整个工程在文后有下载连接.
void Led3On(void) {
    GPIOB->PBSC ^= GPIO_PIN_5;               
}

void Led3Off(void) {
    GPIOB->PBC ^= GPIO_PIN_5;               
}

void Led3Toogle(void) {
    GPIOB->POD ^= GPIO_PIN_5;               
}

void LedInit(void) {
  GPIO_InitType GPIO_InitStructure;

  RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOB, ENABLE);
  GPIO_InitStructure.Pin = GPIO_PIN_5;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitPeripheral(GPIOB, &GPIO_InitStructure);
  Led3Off();
}
void simple_delay_us(uint32_t x) {
  for (uint32_t i = 0; i < x; ++i) {
    for (uint32_t j = 0; j < 40; ++j) {
      __nop();
    }
  }
}

void simple_delay_ms(uint32_t x) {
  for (uint32_t i = 0; i < x; ++i) {
    simple_delay_us(1000);
  }
}
int main(void) {
  LedInit();

  User_Usart_Init();

  /* Output a message on Hyperterminal using printf function */
  printf("\n\rUSART Printf Example: retarget the C library printf function to "
         "the USART\n\r");

  while (1) {
    Led3Toogle();
    printf("Freq %u\n\r", SystemCoreClock);

    simple_delay_ms(300);
  }
}
至此最简单的工程就可build下载运行debug了. 注意本人在使用的过程中发现几个小问题.
1. 调试器要选DAP,新建工程默认选ulink,如果用官方的例子工程无此问题.

2.编译器版本要选v5, 不要选v6. 否则一些驱动工作不正常,如果用官方的例子工程无此问题.
这应该是小问题, 但是显然官方提供的驱动目前还没有在v6编译器中做完全的测试. 本人有时间会仔细看看为什么不兼容.



第四步, 重定向串口实验


首先增加几个软件选项

串口相关代码片段如下, 注意整个工程在后文有下载连接.
#define TEST_BAUDRATE 115200

#define USARTx_RxPin GPIO_PIN_10
#define USARTx_TxPin GPIO_PIN_9

#define GPIO_APBxClkCmd RCC_EnableAPB2PeriphClk
#define USART_APBxClkCmd RCC_EnableAPB2PeriphClk

void User_Usart_Init(void) {
  /* Enable GPIO clock */
  GPIO_APBxClkCmd(RCC_APB2_PERIPH_GPIOA | RCC_APB2_PERIPH_AFIO, ENABLE);
  /* Enable USARTy and USARTz Clock */
  USART_APBxClkCmd(RCC_APB2_PERIPH_USART1, ENABLE);

  GPIO_InitType GPIO_InitStructure;

  /* Configure USART1 Tx as alternate function push-pull */
  GPIO_InitStructure.Pin = USARTx_TxPin;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);

  /* Configure USART1 Rx as input floating */
  GPIO_InitStructure.Pin = USARTx_RxPin;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);

  /* USARTy and USARTz configuration
   * ------------------------------------------------------*/
  USART_InitType USART_InitStructure;

  USART_InitStructure.BaudRate = TEST_BAUDRATE;
  USART_InitStructure.WordLength = USART_WL_8B;
  USART_InitStructure.StopBits = USART_STPB_1;
  USART_InitStructure.Parity = USART_PE_NO;
  USART_InitStructure.HardwareFlowControl = USART_HFCTRL_NONE;
  USART_InitStructure.Mode = USART_MODE_RX | USART_MODE_TX;

  /* Configure USART1 */
  USART_Init(USART1, &USART_InitStructure);
  /* Enable the USART1 */
  USART_Enable(USART1, ENABLE);
}
/* retarget the C library printf function to the USART */
int stdout_putchar(int ch) {
  USART_SendData(USART1, (uint8_t)ch);
  while (USART_GetFlagStatus(USART1, USART_FLAG_TXDE) == RESET)
    ;

  return (ch);
}
int main(void) {
  User_Usart_Init();

  /* Output a message on Hyperterminal using printf function */
  printf("\n\rUSART Printf Example: retarget the C library printf function to "
         "the USART\n\r");

  while (1) {
    printf("Freq %u\n\r", SystemCoreClock);

    simple_delay_ms(300);
  }
}
build, 下载, 运行, 打开串口终端:


这里基础实验就到此为止.

工程都放在github上, 一个分支是一个实验. 后面会主要做性能benchmark和加解密相关的实验.

点此到github仓库



使用特权

评论回复
沙发
内政奇才| | 2022-2-14 10:15 | 只看该作者
才知道国民技术是中兴公司的子公司

使用特权

评论回复
板凳
yljon| | 2022-2-14 10:52 | 只看该作者
不错啊

使用特权

评论回复
地板
chenjun89| | 2022-2-14 12:33 | 只看该作者
Keil支持包很快

使用特权

评论回复
5
hudi008| | 2022-3-3 22:13 | 只看该作者
这个串口用环形的吗  

使用特权

评论回复
6
sdlls| | 2022-3-3 22:38 | 只看该作者
怎么才能判断不定长的数组呢

使用特权

评论回复
7
abotomson| | 2022-3-3 22:53 | 只看该作者
能够配置iar吗   

使用特权

评论回复
8
aspoke| | 2022-3-3 23:17 | 只看该作者
N32G45x系列性能怎么样

使用特权

评论回复
9
pentruman| | 2022-3-4 19:52 | 只看该作者
支持keil开发呢?

使用特权

评论回复
10
1988020566| | 2022-3-4 20:21 | 只看该作者
有其他的例程可以参考吗  

使用特权

评论回复
11
youtome| | 2022-3-4 20:48 | 只看该作者
N32G45XVL可以配置dma吗

使用特权

评论回复
12
beacherblack| | 2022-3-5 21:49 | 只看该作者
官方提供的例程工程在哪里下载的

使用特权

评论回复
13
guijial511| | 2022-3-6 12:40 | 只看该作者
还能直接打电话申请吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:每天都進步

91

主题

1013

帖子

34

粉丝