正点原子的板子不是第一次玩了,NXP的单片机是第一次玩儿,直接上。
正点原子官网连接下载开发板资料包。
拷贝出来标准库函数的实验0 新建工程实验,重命名为CommanderFirmware_v0.0.0
keil5是已经装好了的,直接打开工程,下载安装相关package。
正点原子的DAP研究了10分钟驱动装不上,不让我手动搜资料包里面的inf,不知何解,Jlink应该可以用,略过。
这个工程很简单,初始化了MPU、系统时钟、delay、串口1,一个cnt变量每500ms自增并且打印。
程序是LPUART1输出,不清楚这个打印是从哪个串口出去的,板子上有个RS232 9针的串口,我要把输出调整到这里。原因么,就是我觉得这里更像是给我用来调试输出的地方,个人喜好,仅此而已。先把RS232转USB插上。
Jlink和232转usb都枚举正常硬件准备完毕。
首先确认PCB丝印是COM4,然后去找开发板原理图,找原理图的时候瞄到一个《号令者RT1052开发板IO引脚分配表.xlsx》看样子比原理图直观,打开直接搜COM4,有惊喜,很清楚:需要P8跳帽调整一下,速度搞定,同时注意到Tx GPIO名字GPIO_SD_B1_00属于UART4,RX略同。
接下来改程序。找到main,找到Lpuart1_Init();跳转到定义,跳不过去,以为是工程设置里面的Output里面的Browser Infomation没有启用,打开一看是选中的,那么原因只是非常纯粹的没有编译,Build,不得不吐槽,这东西带着这个选项编译怎么还是这么慢!
编译完成,没有w和e。main.c同路径下新建systemconfig.h,给全局宏定义准备个窝。这个文件是为了便于维护,避免后面其他同事找个IO定义的时候满工程搜,搜到还不敢改,改了还要诚惶诚恐的测试,我喜欢规定好这个文件,要找都来这里找。直接包含到lpuart.c里面去。systemconfig.h一边改代码一边加,最后变成这样(这个代码的tab和keil不一样,代码里宏定义的值是对齐的):
#ifndef __SYSTEMCONFIG_H__
#define __SYSTEMCONFIG_H__
/* Debugprint UART */
#define DBGPRINTUART LPUART4
#define DBGPRINTUART_CLOCK kCLOCK_Lpuart4
#define DBGPRINTUART_MUX_TX IOMUXC_GPIO_SD_B1_00_LPUART4_TX
#define DBGPRINTUART_MUX_RX IOMUXC_GPIO_SD_B1_01_LPUART4_RX
#define DBGPRINTUART_IRQn LPUART4_IRQn
#define DBGPRINTUART_IRQn_prep (5U)
#define DBGPRINTUART_IRQn_subp (0U)
#endif /* __SYSTEMCONFIG_H__ */
期间遇到的问题,
IOMUXC_SetPinMux(DBGPRINTUART_MUX_TX,0U);
这个函数第二个参数不知道是什么意义,看头文件解释:
* @param inputOnfield Software input on field.
*/
static inline void IOMUXC_SetPinMux(uint32_t muxRegister,
uint32_t muxMode,
uint32_t inputRegister,
uint32_t inputDaisy,
uint32_t configRegister,
uint32_t inputOnfield)
*((volatile uint32_t *)muxRegister) =
IOMUXC_SW_MUX_CTL_PAD_MUX_MODE(muxMode)
| IOMUXC_SW_MUX_CTL_PAD_SION(inputOnfield);
(⊙o⊙)… 还是没能李姐,查下这个寄存器的定义,说实话,刚结束NXP的ref还真是没摸到它的门,直接按照外设比如iomux来找其实不是很好找,后来发现竟然可以通过代码的寄存器地址直接定位,有点神奇:从上面代码里面的muxRegister知道要找IOMUXC_SetPinMux的第一个参数:
#define IOMUXC_GPIO_SD_B1_00_LPUART4_TX 0x401F81D4U, 0x4U, 0x401F8544U, 0x0U, 0x401F83C4U
就是0x401F81D4U,我也是抱着试试的心态直接在参考手册里面搜了下81d4,就在目录里面定位到了:
然后点击链接,就有了:
Force the selected mux mode Input path no matter of MUX_MODE functionality.
好吧,不论muxmode配置成什么,强制选择为输入。我没有理解NXP设计的意图,后面再慢慢理解吧。
F8下载,失败,没有找到DAP,不好意思用的jlink,工程设置Debugger改成jlink,旁边的setting进去,没有找到cpu,忘记给板子上电了,开启电源,顺利找到cpu,download里面看看,果然没有flash,下面点击add,出现列表第二个Norflash8M就它了,确定退出,F8,刷刷刷,屏幕上什么也没发生。当然,串口助手都没开,没得看,关闭电源,打开串口助手,选择rs23,打开,很顺利。不得不说这其实是是我偏爱232的原因,就是只要我插着串口线主板没电,这个232的链接也是在的,如果用常规的usb我可能调试的过程中会意外在调试助手开着com通道的时候拔掉串口线,基本上只有强行关机才能回复usb了。
打开电源,f1,f2.。。这是啥,一脸懵,我钟爱的hello怎么没有,多么缺乏仪式感!
该代码,成hello RT1052!编译下载:
[20:21:57.325] Hello RT1052!
yes! 这样才完美!