前言
测试第一篇,先搭建下环境点个灯,开发环境的支持友好度至关重要。
下载资料
ftp://58.250.18.138/Nations%20Products%20File/2-Microcontrollers/ 根据开发板下载对应的资料,N32G457xx_V3.0.0.zip
安装开发环境
安装MDK
我这里是V5.37,安装过程网上资料较多不再赘述。 安装芯片支持包
解压N32G457xx_V3.0.0.zip,双击N32G457xx_V3.0.06-软件开发套件(Software Development Kit)Nationstech.N32G45x_DFP.1.0.5.pack 会自动搜索MDK安装路径,安装
点灯样例程序
N32G457xx_V3.0.06-软件开发套件(Software Development Kit)Nationstech.N32G45x_Library.2.1.0projectsn32g45x_EVALexamples下即有各种样例程序。有IAR和MDK版本。 以GPIOLedBlink为例。 双击 N32G457xx_V3.0.06- 软件开发套件(Software Development Kit)Nationstech.N32G45x_Library.2.1.0projectsn32g45x_EVALexamplesGPIOLedBlinkMDK-ARMLedBlink.uvprojx打开
右键点击目录的N32G45x->Options for target ... 选择编译器版本
选择设备
进行编译
USB接到丝印DEBUG USB的口,点击进入下载仿真环境。
Debug->Run 从原理图N32G457xx_V3.0.05-硬件评估板(Hardware Evaulation Board)N32G45XVL-STB_V1.1N32G45XVL-STB_V1.1.pdf可以看到 LED对应PA8,PB4,PB5
修改main函数为 int main(void) { LedInit(GPIOB, GPIO_PIN_4 | GPIO_PIN_5); LedInit(GPIOA, GPIO_PIN_8); while (1) { LedBlink(GPIOB, GPIO_PIN_4 | GPIO_PIN_5); LedBlink(GPIOA, GPIO_PIN_8); Delay(0x28FFFF); } } 重新下载运行发现led常量,查看汇编代码发现Delay函数没有了,这是因为编译器认为该函数做无意义的事情优化掉了,所以闪烁频率非常快没有延时,看起来就是常量了。
Delay改为 void Delay(uint32_t count) { volatile uint32_t t = count; for (; t > 0; t--) ; } 重新下载运行就可以看到D3 D1闪烁了。但是D2只有微弱亮,查看D2对应PB4,擦看数据手册知道该引脚默认为NJTRST
需要按照手册的描述重映射
SW_JTAG_CFG[2:0]配置为001. RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_AFIO, ENABLE); GPIO_ConfigPinRemap(GPIO_RMP_SW_JTAG_NO_NJTRST,ENABLE); 或者 AFIO->RMP_CFG = AFIO->RMP_CFG & (~AFIO_RMP_CFG_SW_JTAG_CFG) | AFIO_RMP_CFG_SW_JTAG_CFG1; 注意要使能AFIO时钟。 修改后就可以看到D2也闪烁了。 但是仿真时看不到该寄存器的配置读出来是0,实际肯定是生效配置了的,因为IO已经remap了,LED闪烁了。
总结1. AFIO的寄存器区域读出来都是0,确认已经使能了AFIO的时钟,并且都切换PB4为GPIO了,测试PB4对应的LED也闪烁了。这个应该是BUG。 2. 注意操作AFIO和GPIO都要使能对应时钟。 3. Delay注意会优化掉,需要volatile修饰变量避免优化。 4. 官方资料十分规范。都是按照STM的模式,库,MDK的支持包源码风格等都和STM32类似。所以对于STM32+MDK的使用者来说可以无感切换。资料文档这一点做的非常好,是值得点赞的,在国内半导体厂家中尤为突出。
|