KE CAN

举报
TopSemic嵌入式 发表于 2021/10/18 23:53:42 2021/10/18
【摘要】 在官网http://www.freescale.com/zh-Hans/products/arm-processors/kinetis-cortex-m/e-series/freescale-freedo...

在官网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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。