KE CAN
在官网http://www.freescale.com/zh-Hans/products/arm-processors/kinetis-cortex-m/e-series/freescale-freedom-development-platform-for-kinetis-ke06-mcus:FRDM-KE06Z?fpsp=1&tab=Design_Tools_Tab
下载的KE driver,其中的CAN 例子是有问题的,同事Const Yu在其bloghttp://www.eefocus.com/constyu/blog/15-06/313693_27294.html 说了。
我自己再总结记录一下。
1)FRDM_KE06 使用的外部8M晶振,最后经过FLL倍频到48M,总线时钟为20M
2)CAN的时钟可以选择为振荡器时钟或者总线时钟,由MSCAN_CANCTL1中CLKSRC位来决定
在main函数的下面这条语句可以修改
sMSCANConfig.sSetting.bCLKSRC = 1;// Bus Clcok
- 1
3)CAN 波特率设置,Const Yu写的一篇文章非常好。http://www.freescaleic.org/module/forum/thread-599175-1-1.html 这里可以下载。
原先代码波特率的设置有问题:
#define BAUD_RATE_SJW SJW_3TQ /*!< 1 set Synchronization Jump Width. */
#define BAUD_RATE_BRP 0 /*!< 1 Baud Rate Prescaler */
#define BAUD_RATE_SAMP 0 /*!< 0-One sample per bit, 1-three sample per bit. */
#define BAUD_RATE_TSEG1 TSEG_10 /*!< Time Segment 1*/
#define BAUD_RATE_TSEG2 TSEG_7 /*!< Time Segment 2*/
#define BAUD_RATE_CLOCK 8000000L/*!< clock source for MSCAN*/
#define Baud_RATE BAUD_RATE_CLOCK/(BAUD_RATE_BRP+1)/\
(BAUD_RATE_SJW+1)/(3 + BAUD_RATE_TSEG1+\
BAUD_RATE_TSEG2)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
如果设置100K 波特率应该改为:
#define BAUD_RATE_SJW SJW_3TQ /*!< 1 set Synchronization Jump Width. */
#define BAUD_RATE_BRP 9 /*!< 10 Baud Rate Prescaler */
#define BAUD_RATE_SAMP 0 /*!< 0-One sample per bit, 1-three sample per bit. */
#define BAUD_RATE_TSEG1 TSEG_12 /*!< Time Segment 1*/
#define BAUD_RATE_TSEG2 TSEG_7 /*!< Time Segment 2*/
#define BAUD_RATE_CLOCK 2000000L/*!< clock source for MSCAN*/
#define Baud_RATE BAUD_RATE_CLOCK/(BAUD_RATE_BRP+1)/(3 + BAUD_RATE_TSEG1+ BAUD_RATE_TSEG2)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
这时BRP=9,10分频;TSEG1=12,TSEG2=5,SJW=2,SAMP=0
如果配置为500K 波特率,应该做的修改是,在100K基础上改动一处即可,就是BRP改为1,2分频即可。
下面将其移植到KEA 128 开发板上
FRDM_KE06 用的是PTE7和PTH2
TRK-KEA128的用的是PTC7和PTC6
需要通过SIM_PINSEL1的MSCANPS位去控制
将
SIM->PINSEL1 |= SIM_PINSEL1_MSCANPS_MASK; //PTE7 PTH2
- 1
改为:
SIM->PINSEL1 &= ~SIM_PINSEL1_MSCANPS_MASK; //PTC7 PTC6
- 1
这样修改之后CAN就可以跑在KEA的板子上了。
注意KE的pinmux和KL和K系列不同,它没有专门的MUX位进行引脚复用,
下一步修改printf的UART口
KE06用的是UART1
KEA用的是UART2
只需要将
#define TERM_PORT UART1 /*!< UART1 is used on KE06 freedom board */
- 1
改为
#define TERM_PORT UART2 /*!< UART2 is used on KE06 freedom board */
- 1
这里并没有对UART1PS和UART2PS做设置,因为复用时为0,正好符合。
其实在sim.h 中有相关的函数进行设置,SIM_RemapUART1ToPTF_2_3()和SIM_RemapUART1ToPTC_6_7() ,CAN设置的也有。
再看看GPIO操作。
RED:PTG5
对应GPIOB的21位
KEA的板子上有以下几个lED灯可以控制
做个简单更改即可
#define LED0_Init() GPIOA->PDDR |= (1<<16) /*! D3 Light */
#define LED0_Toggle() GPIOA->PTOR = (1<<16)
#define LED0_Clear() GPIOA->PCOR = (1<<16)
#define LED0_Set() GPIOA->PSOR = (1<<16)
#define LED1_Init() GPIOA->PDDR |= (1<<17) /*! D4 Light */
#define LED1_Toggle() GPIOA->PTOR = (1<<17)
#define LED1_Clear() GPIOA->PCOR = (1<<17)
#define LED1_Set() GPIOA->PSOR = (1<<17)
#define LED2_Init() GPIOA->PDDR |= (0x01<<18) /*! D5 Light */
#define LED2_Toggle() GPIOA->PTOR = (0x01<<18)
#define LED2_Clear() GPIOA->PCOR = (0x01<<18)
#define LED2_Set() GPIOA->PSOR = (0x01<<18)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
文章来源: blog.csdn.net,作者:TopSemic嵌入式,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/wangwenxue1989/article/details/48392825
- 点赞
- 收藏
- 关注作者
评论(0)