非常感谢电子发烧友论坛、国民技术,给了我这次参赛的机会。华秋商城下单后,快递非常快的就到了。收到的开发板分享如下:
一:开发版功能
开发板主 MCU 型号为 N32G435CBL7,LQFP48 管脚封装 ,开发板把所有的功能接口都连接出来,方便客户开发。
二:开发板布局
-
开发板的供电
开发板可选用USB COMM接口(J3)供电和DEBUG USB(J4)供电,通过J6跳线连接到3.3V LDO输入口。
-
USB COMM接口(J3)
采用Mini USB接口(J3),连接主MCU(U3)的DP和DM信号,用于主MCU的USB接口通讯。
-
DEBUG USB(J4)
通过NS-LINK芯片(U4)的DEBUG USB接口,可以提供主MCU程序下载调试功能,也可以连接MCU的串口提供USB转串口功能。
-
SWD接口 + 串口(J5)
SWD接口:SWDIO和SWDCK,用于主MCU程序下载调试,可采用ULINK2或JLINK对MCU进行下载调试,也可以跳线帽短接SWDIO信号插针以及SWDCK信号插针,通过DEBUG USB对MCU进行下载调试。
串口:MCU_TX和MCU_RX,用作串口外接信号,MCU的PA9(TX)和PA10(RX)用作串口,可以单独外接串口设备,也可以跳线帽短接MCU_TX信号插针以及MCU_RX信号插针,通过开发板上的NS-LINK,将USB口转为串口,方便客户使用;
-
复位和唤醒按键 (S7、S6) S7、S6分别为复位按键和唤醒按键,分别连接芯片的NRST管脚和PA0-WKUP管脚,用于芯片复位和唤醒功能。
-
通用按键 (S1、S2、S3) S1、S2、S3为通用按键,分别连接芯片PA4、PA5和PA6管脚。
-
BOOT (J1 PIN12) J1 PIN12为BOOT0插针,可以根据需要通过跳线帽短接到邻近的电源和地。
-
GPIO口(J1、J2)
芯片GPIO接口全部引出,插针上也预留3.3V电压和GND插针,方便测试。
三:开发板跳线使用说明
开发板跳线说明列表:| No. | 跳线位号 | 跳线功能 | 使用说明 |
| ----- | ----------- | ------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------- |
| 1 | J6 | 5V电压跳线 | J6跳线用于连接J3和J4两个USB接口供电给LDO3.3V输入口。 |
| 2 | J8、J15 | 3.3V供电跳线 | J8: 供电3.3V给NS-L1NK MCU芯片。J15:供电3.3V给主MCU芯片。 |
| 3 | J5 | SWD跳线 | 使用NS-L1NK通过USB DEBUG口下载程序给MCU,需要短接SWD10信号插针以及SWDCK信号插针。 |
| J5 | 串口跳线 | 使用NS-L1NK通过USB DEBUG口做串口使用时,需要短接MCU_TX信号插针以及MCU RX信号插针。 | |
| 4 | JI PIN 12 | BOOT跳线 | JI P1N12: BOOT0 |
| 5 | J7 | PAO WAKEUP跳线 | J7:短接此跳线,USB接口插入时,通过PA0 唤醒MCU (设置PA0位为WKUP信号)。 |
|** 注:当遇到无法下载 或者程序错误导致无法烧录。
BOOT0接3v3 可进入烧录模式。**
四:资料
这次官方活动提供了完整的资源下载:国民技术N32系列开发板资料合集-电子技术资料专题-电子发烧友 (elecfans.com)
总的来说,这个开发板做工用料非常好。而且也提供了完整的示例。
如何搭建国民技术N32 MCU开发环境 keil MDK(官方教程)https://www.bilibili.com/video/BV1hK411X7zh
下载资料:
ftp://58.250.18.138
五:开始使用,几种简单的开发环境。
1.RT-Thread Studio
直接点创建,基于开发版,点击开发版 添加
安装对应的板子,速度很快就安装好了。
很轻松就可以 写点亮led的代码了。
daplink无法下载 提示缺少配置文件,看了看帮助页面。
配置过于复杂不会。
使用 Nations MCU Download Tool V1.2.3 工具
下载编译好的固件。
keil MDK 安装教程很多 就省略了。
点击 下载回来的
Nationstech.N32G43x_DFP.0.9.3.pack
就能自动安装了。
芯片选择N32G435CB
如何搭建国民技术N32 MCU开发环境 keil MDK(官方教程)https://www.bilibili.com/video/BV1hK411X7zh
里面demo很多 搞个点灯demo看看
代码 可能禁用JTAG功能。
导致无法 第二次烧录
不过也简单 BOOT0接3v3 可进入烧录模式。按下rst。
点下载即可。
不过默认代码 只能点亮PB4 这个led灯。
还是希望能点亮三个led灯。
默认代码是
LedOn(LED2_PORT, LED2_PIN);
不太懂 gpio明明是A B C D开头,这是如何区分
F12跳进定义 看看
/ Led1-PA9,Led2-PA10,Key-PA8 /
#define LED1_PORT GPIOA
#define LED2_PORT GPIOA
#define LED1_PIN GPIO_PIN_8
#define LED2_PIN GPIO_PIN_9
#define LED3_PIN GPIO_PIN_10
#define LED4_PIN GPIO_PIN_1
#define LED5_PIN GPIO_PIN_5
和arduino 表示的io不一样,并不是 从gpio 0-xx 这样格式。
一组GPIO有16个IO口,比如GPIOA这一组,有GPIOA0~GPIOA15一共16个IO口。每一个IO口需要寄存器的4位用来配置工作模式。
小记:GPIOA =地址
需要点亮的三个led灯
PB5 PB4 PA8
添加几个定义
#define PORT_GROUP1 GPIOA
#define PORT_GROUP2 GPIOC
#define PORT_GROUP3 GPIOB
删掉man 方法里面代码,重新写。
LedInit(PORT_GROUP1, LED1_PIN);
LedInit(PORT_GROUP3, LED5_PIN);
LedOn(PORT_GROUP1, LED1_PIN);
LedOn(PORT_GROUP3 LED5_PIN);
调试了几下 发现这些定义 使用起来很麻烦,定义也不明确。
参考定义里面的变量 直接改掉,不用常量了。
LedInit(GPIOA, PA8_PIN);
LedInit(GPIOB, GPIO_PIN_4);
LedInit(GPIOB, GPIO_PIN_5);
这样就直观多了。
现在准备闪烁起来。
LedOn(GPIOA, PA8_PIN);
LedOn(GPIOB, GPIO_PIN_4);
LedOn(GPIOB, GPIO_PIN_5);
Delay(0x28FFFF);
LedOff(GPIOA, PA8_PIN);
LedOff(GPIOB, GPIO_PIN_4);
LedOff(GPIOB, GPIO_PIN_5);
Delay(0x28FFFF);
测试了下 pb4不会亮。
去能点亮的demo 复制下。
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_AFIO,ENABLE);//使能AFIO复用功能时钟
//GPIO_ConfigPinRemap(GPIO_RMP_SW_JTAG_DISABLE, ENABLE);//复用功能重映射
注释的语句不知道哪复制的 找不到这个方法了。
GPIO_WriteBit(GPIOB, GPIO_PIN_4, (Bit_OperateType)(1 - GPIO_ReadOutputDataBit(GPIOB, GPIO_PIN_4)));
从另外一个demo复制一个可用的。
这下功能正常了。
后来发现 闪灯的速度 太快了 手机拍出的不清晰 想改下延时。
Delay(0x28FFFF);
这是什么鬼,
Delay(1000);
改成这样 成常亮了。纳尼、
跳进代码 看下是怎么实现的。
void Delay(uint32_t count)
{
for (; count > 0; count--)
;
}
就一个循环 并无其他代码,提示变量是个整数
0x28FFFF 十六进制到十进制 转换下看看
结果2686975
Delay(2686975);
测试了下 效果一致、
好家伙 延时大概500毫秒,就可以执行268万次,一直以为单片机挺弱的,原来也挺快。
但是记得RT-Thread Studio的延时是准确的,看看怎么实现的。
rt_tick_t rt_tick_from_millisecond(rt_int32_t ms)
{
rt_tick_t tick;
if (ms < 0)
{
tick = (rt_tick_t)RT_WAITING_FOREVER;
}
else
{
tick = RT_TICK_PER_SECOND * (ms / 1000);
tick += (RT_TICK_PER_SECOND * (ms % 1000) + 999) / 1000;
}
return tick;
}
下一篇,学习i2c及oled添加,