This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

用户试用分享篇-【TI CC3200 LaunchPad试用体验】驱动IO口与printf

Other Parts Discussed in Thread: CC3200, CC3200SDK, CC3200MOD

简单介绍些cc3200 的一些参数:

主频80M,ROM64kb,Sram 256kb 等等……

 

第一个LED灯

路径:C:\TI\CC3200SDK_1.2.0\cc3200-sdk\example\blinky\ewarm

以第一个Blink 示例demo开始~

代码很少,大概能猜测到是什么意思,首先来个BoardInit,发现好像每个工程都有个这个函数,有兴趣的人可以更深入的看看GoTo过去,貌似是根据环境不同(CCS or IAR)来配置中断表? 大致是这样,同时还有些函数是看不到实体的,这时候可以借助文档:

C:\TI\CC3200SDK_1.2.0\cc3200-sdk\docs\CC3200-Peripheral_Driver_Library_User's_Guide.chm

这个可以查到,举个例子:

    MAP_PRCMPeripheralClkEnable(PRCM_GPIOA1,PRCM_RUN_MODE_CLK);

字面上的意思可以知道这个是开启某个时钟~(实际就是GPIOA1的时钟啦~那么第二个参数什么意思呢?参看文档:

 

 

这就可以知道,一个是用在睡眠情况下仍然可以保持该时钟是工作的。什么函数不明白都可直接查看该文档~

--------------------------------------------------------- 以下图片取自CC3200MOD.pdf文档(芯片数据手册)

要注意的是MODULE PINNAME 跟 DEVICE PIN NO 这两列~

举个例子:

根据我们刚打开的Blink工程,有3个LED灯,如下是它们的初始化方式:

    // Configure PIN_64 for GPIOOutput

    MAP_PinTypeGPIO(PIN_64, PIN_MODE_0, false);                 

这里为什么是PIN_64?PIN_MODE_0又代表什么意思

答:参看原理图可以知道3个LED等分别连接着GPIO_9,10,11,再看看数据手册的Pin Attributes部分~

有木有发现GPIO_9对应的DevicePinNo上写的是64~,

 

同样PIN_MODE_0可在如下表中找到~

 

相同道理,如果要初始化个UART,SPI,I2C什么的,也是要先这么定义,在此就不再多少其他外设初始化的东西了,官方给的demo里面都有,可以自己看下。

接下来: MAP_GPIODirModeSet(GPIOA1_BASE, 0x2,GPIO_DIR_MODE_OUT);

需要说明的是CC3200共有io口32个,

分成4组即

GPIOA0_BASE     gpio0   ---     gpio7

GPIOA1_BASE     gpio8   -----  gpio15

GPIOA2_BASE     gpio16 ----   gpio23

GPIOA3_BASE     gpio24 ----   gpio31

(头文件定义了一个GPIOA4_BASE ,可能是为了以后拓展?目前还不懂)。

可以知道上面语句是设置GPIOA1的第2个引脚,即GPIO9这个引脚为输出方向,这样一个IO口的引脚配置好了。

置高GPIOPinWrite(GPIOA1_BASE,GPIO_PIN_2,GPIO_PIN_2); 置低GPIOPinWrite(GPIOA1_BASE,GPIO_PIN_2,0);

以上函数同样查看文档:CC3200-Peripheral_Driver_Library_User's_Guide.chm

以上,驱动通用IO口完成,

测试:使用GPIO22引脚输出一个高低高低的波形。

那么代码是这样的:

MAP_PRCMPeripheralClkEnable(PRCM_GPIOA2,PRCM_RUN_MODE_CLK);

MAP_PinTypeGPIO(PIN_15,PIN_MODE_0, false);

MAP_GPIODirModeSet(GPIOA2_BASE,GPIO_PIN_6, GPIO_DIR_MODE_OUT);

 

While(1)

{

GPIOPinWrite(GPIOA2_BASE,GPIO_PIN_6,GPIO_PIN_6);

MAP_UtilsDelay(10000);

GPIOPinWrite(GPIOA2_BASE,GPIO_PIN_6,0);

MAP_UtilsDelay(10000);

}

这样使用逻辑分析仪抓取GPIO22这个口就能看到波形,(板子上的标号:P15,)

在此吐槽下,

1.官方写了个库,可是这IO口对应让我感觉好别扭(有PIN64对应GPIO_9的?再来就是有些直接写0x02,0x04什么的,不好猜啊,不知道哪个文档有相关描述呢。)

2.单单IO口置高置低的函数我看着参数也觉得好别扭(最后一个参数应该为0或者1比较好吧?)

好奇葩的驱动方式啊,不知道大家是不是也像我这样驱动的~还是我的能力问题。。。大家仁者见仁……随便喷没事。。

3.cc3200板子上的丝印~~~不太明白啊。。感觉好乱,哈哈。

再有就是这个delay~,官方文档写了

 

 

比如我参数写的10000,那么它占用了多少时间呢~~~,一个delay占用3个周期,

80m的主频,那么算出来delay 10000 理论上应当 = 0.375ms 吧。??? 可实际是0.75ms~难道主频是40M,还是我算错了?

麻烦大家帮忙解释解释。

实际波形如下:

 

 

//--------------------------------------  uart 串口使用----------------------------------------------------------------------------

采用微库的printf~来往串口打印数据(串口重定向)。

采用的demo:

C:\TI\CC3200SDK_1.2.0\cc3200-sdk\example\uart_demo

该demo未修改时,会往串口打印一些信息,大家可以自行执行查看效果。

在PC机端编程时经常可以通过printf 来输出一些log,或者变量的值相当方便,下面介绍使用方法:

1.使用微库(#include "stdio.h")

2.重定向printf,即:

int fputc(intch,FILE *f)   

{

    UartPutChar(ch) ; // 关键是这里~~~这句话是cc3200往串口输出一个字节的语句~。

    return (ch);

}

以上做完后编译~ 会报错:Error[Pe020]:identifier "FILE" is undefinedC:\TI\CC3200SDK_1.2.0\cc3200-sdk\example\uart_demo\main.c 100

这是IAR工程设置问题,FILE未定义啥的~,右键workspace的工程名uart_demo….选中Option,在GeneralOptions中选择Library Configuration

Library:此处选择Full。如此再编译看看。

按照人品应该编译通过了~,写个Hello world 来试试~当然printf的用法很多,

大家可以当做在PC端上的printf尽情使用啦。