本文记录用ti的TMS320F28379D LaunchPad调CAN通讯的过程,最后会给出代码。
用的是CCS11.1版本加上ti的C2000ware的库。
一开始用的是C2000ware库中的can_ex4_simple_transmit中的程序,把复用引脚改为开发板上的GPIO12和GPIO17引脚,上位机一直采集不到。排除了很久,发现CAN的比特率不对,跟程序设置的不一样。看这个帖子有感,想查一查系统的主频是多少。TI C2000WARE官方例程时钟配置的坑(针对TMS320F28379D LaunchPad XL) / DSP / WhyCan Forum(哇酷开发者社区)
系统的延迟函数DEVICE_DELAY_US()是以微妙为单位的,推测内层函数是汇编写的(时间测量比较准确),所以用它跟GPIO配合,测量系统的频率。
Device_initGPIO();
GPIO_setPadConfig(61, GPIO_PIN_TYPE_PULLUP); // Enable pullup on GPIO6 先启动输入上拉
GPIO_setPinConfig(GPIO_61_GPIO61); //配置复用
GPIO_setDirectionMode(61, GPIO_DIR_MODE_OUT); // GPIO6 = output 配置IO口的输入以及输出方向
while(1)
{
GPIO_writePin(61, 1); // Load output latch
DEVICE_DELAY_US(50000);
GPIO_writePin(61, 0); // Load output latch
DEVICE_DELAY_US(50000);
}
用示波器测量GPIO61口的波形,示波器测量图见下图。
从示波器中可以看到△x=100ms,即GPIO61口输出的高电平或者低电平的时间为100ms,而程序中的延迟函数设置的为50ms,由此可以看出系统主频慢了1/2.
从系统的初始化函数Device_init()(按住ctrl键点击这个函数之中)中找到SysCtl_setClock(DEVICE_SETCLOCK_CFG)语句,在按ctrl进入DEVICE_SETCLOCK_CFG,将参数改为下图所示。