本帖最后由 lin704932121 于 2016-1-6 21:49 编辑
收到板子后就试着移植uC/OS-III。因为STM32F469还是Cortex-M4的核,参考Micrium官网F4的Demo, 移植过程还是很顺利的。只需要结合Micrium官网F4的Demo和STM32F4xx_StdPeriph_Driver,再更改下HSE即可。介绍下我使用µC/Probe和µC/Shell的过程。
一、使用µC/Probe
µC/Probe是Windows下的应用程序,可以在嵌入式系统运行时查看修改其内存。它读取嵌入式系统可执行文件(elf,axf),将其中的变量地址等信息映射到图形界面。µC/Probe不仅可以查看uC/OS-III内核的运行状态,而且通过简单地拖拽UI控件,还支持查看或修改用户变量以及shell终端等。
uC/Probe目前可以通过Jlink、串口、TCP、USB、 IAR IDE等和目标板进行通讯。使用 IAR IDE只要有个调试器就可以了,但是Keil MDK调试器目前只能选择jlink。虽然STM32F469-Discovery板子使用的是STlink调试器,但我们还是可以使用串口进行通讯。串口通讯需要在STM32F469嵌入µC/Probe目标板的代码。
uC/Probe使用USART3,USART3连接到板子上的STlink,将STlink的USB接口直接连接到PC机上,就可以使用这个串口了。
1、打开 EvalBoards\ST\STM32469I-Discovery\uCOS-III\KeilMDK\uCOS-III.wspx
2、在settings中选择相应的COM port。 3、点击Run。
我在STM32469I中写了两条shell命令。trace命令用于显示要输出的内容,add命令用于两个数相加。
Shell_Init(); /*Initialize uC/Shell*/
/*Add shell command*/
Shell_CmdTblAdd("trace", (SHELL_CMD[]){{"trace", trace},{0, 0 }}, &shell_err); /*--gnu C style, see Options for Target C/C++*/
Shell_CmdTblAdd("add", (SHELL_CMD[]){{"add", add},{0, 0 }}, &shell_err); /*--gnu C style, see Options for Target C/C++*/
ProbeCom_Init(); /* Initialize the Generic module */
ProbeRS232_Init(115200); /* Initialize the USART3 interface */
ProbeRS232_RxIntEn(); /* Initialize the USART3 Rx interrupts */
ProbeTermAppHookRxPtr = AppProbeTermHookRx;
ProbeTermInit(&term_err); /* Initialize the uC/Probe terminal window. */
uC/Probe Terminal中输入trace bbs.21ic.com,可以看到在上面的窗口中回显了bbs.21ic.com
uC/Probe Terminal中接着输入add 111 222
二、使用µC/Shell
其实上面的例子里已经使用了µC/Shell,下面我再介绍使用板子上另一个串口USART6 执行shell命令和使用非阻塞printf。
USART6 在扩展排座CN12上,需要自己接USB-TLL转串口。
在SecureCRT打开串口终端,你现在可以使用类Linux的shell操作,可以使用TAB键显示所有shell命令,按上下键回显历史命令等。这些shell操作是从rt-thread中移植的。
如何实现printf 非阻塞? printf 最终调用fputc(),fputc()中不通过串口直接发送数据,而是将数据压入一个FIFO中,由另一个任务将FIFO数据弹出并通过串口发送。代码参见 bsp_ser.c 。
开发工具用的是Keil MDK 4.7, 虽然型号里没有STM32469I,但是可以用STM32407代替,把ROM和RAM大小改下即可。
|