STM32 开发入门教程 - 图文(8)

2019-05-17 09:51

/* Configure CAN pin: TX */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, GPIO_InitStructure);

------------------------------------------------------------------------ 重定义地址1模式

/* Configure CAN pin: RX */

//GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //GPIO_Init(GPIOB, GPIO_InitStructure);

/* Configure CAN pin: TX */

//GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //GPIO_Init(GPIOB, GPIO_InitStructure);

/* Configure CAN Remap 重影射 */

//GPIO_PinRemapConfig(GPIO_Remap1_CAN, ENABLE);

------------------------------------------------------------------------- 重定义地址2模式

/* Configure CAN pin: RX */

//GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //GPIO_Init(GPIOD, GPIO_InitStructure);

/* Configure CAN pin: TX */

//GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //GPIO_Init(GPIOD, GPIO_InitStructure);

/* Configure CAN Remap 重影射 */

36

//GPIO_PinRemapConfig(GPIO_Remap2_CAN, ENABLE);

-------------------------------------------------------------------------

设置完 CAN 的引脚之后还需要打开 CAN 的时钟: /* CAN Periph clock enable */

RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN, ENABLE);

(四) CAN 波特率设置

4、我们需要搞明白CAN波特率的设置,这个章节也是使用CAN的最重要的部分之一,因为这实际应用中我们需要根据我们实际的场合来选择 CAN 的波特率。 一般情况下面1M bps 的速率下可以最高可靠传输 40 米以内的距离。 在 50K 以下的波特率中一般可以可靠传输数公里远。

对于波特率的设置需要详细学习参考手册对应部分的解释。我们在调试软件的时候可以使用示波器来测试 CANTX 引脚上的波形的波特率,这样可以得到事半功倍的效果,大大的缩短调试学习的时间。

// *************************************************************** // BaudRate = 1 / NominalBitTime // NominalBitTime = 1tq + tBS1 + tBS2 // tq = (BRP[9:0] + 1) x tPCLK // tPCLK = CAN's clock = APB1's clock

// ****************************************************************

也就是BaudRate = APB1 / ((BS1 + BS2 + 1) * Prescaler)

这里注意的是采用点的位置,也就时BS1,BS2的设置问题,这里我也找了一些资料,抄录下来给大家,是 CANopen 协议中推荐的设置。

1Mbps 速率下,采用点的位置在6tq位置处,BS1=5, BS2=2 500kbps 速率下,采用点的位置在8tq位置处,BS1=7, BS2=3 250kbps 速率下,采用点的位置在14tq位置处,BS1=13, BS2=2 125k, 100k, 50k, 20k, 10k 的采用点位置与 250K 相同。

因此我们需要重视的有软件中的这么几个部分:

// 设置 AHB 时钟(HCLK)

37

// RCC_SYSCLK_Div1 AHB 时钟 = 系统时钟 RCC_HCLKConfig(RCC_SYSCLK_Div8);

// 设置低速 AHB 时钟(PCLK1)

// RCC_HCLK_Div2 APB1 时钟 = HCLK / 2 RCC_PCLK1Config(RCC_HCLK_Div2);

// PLLCLK = 8MHz * 8 = 64 MHz // 设置 PLL 时钟源及倍频系数

RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_8);

CAN 波特率设置中需要的就是PCLK1 的时钟。

CAN_InitStructure.CAN_Mode=CAN_Mode_LoopBack; CAN_InitStructure.CAN_SJW=CAN_SJW_1tq; CAN_InitStructure.CAN_BS1=CAN_BS1_8tq; CAN_InitStructure.CAN_BS2=CAN_BS2_7tq; CAN_InitStructure.CAN_Prescaler=5;

通过上面部分的时钟设置我们已经可以算出我们的波特率了 CAN_bps = PCLK1 / ((1 + 7 + 8) * 5) = 25K bps

大家也可以实际测试中修改时钟值来通过示波器测试我们需要的波特率是否正确例如将PLLCLK 设置降低一半:

// PLLCLK = 8MHz * 4 = 32 MHz // 设置 PLL 时钟源及倍频系数

RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_4);

那么我们得到的CAN_bps也会降低一半。

接下来还可以修改 HCLK 和 PCLK1 ,其实最终这几个分频和倍频值最终影响的都是 PCLK1。

通过几次试验,相信大家应该很容易掌握波特率的设置了。

设置完波特率我们直接测试函数:

38

/* CAN transmit at 100Kb/s and receive by polling in loopback mode*/ TestRx = CAN_Polling();

if (TestRx == FAILED) {

/* Turn on led connected to PA.00 pin (LD1) */ GPIO_SetBits(GPIOA, GPIO_Pin_0); } else {

/* Turn off led connected to PA.00 pin (LD1) */ GPIO_ResetBits(GPIOA, GPIO_Pin_0); }

/* CAN transmit at 500Kb/s and receive by interrupt in loopback mode*/ TestRx = CAN_Interrupt();

if (TestRx == FAILED) {

/* Turn on led connected to PA.01 pin (LD2) */ GPIO_SetBits(GPIOA, GPIO_Pin_1); } else {

/* Turn off led connected to PA.01 pin (LD2) */ GPIO_ResetBits(GPIOA, GPIO_Pin_1); }

将 CAN 软件仿真模拟器 调用出来.

39

大家可以仿真程序,当程序中 Test 等于 Passed 那么说明 Loopback 模式测试通过了。 并且在 CAN 通讯框中我们可以看到发送和接收到的数据:

40


STM32 开发入门教程 - 图文(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:中新自由贸易区发展现状及趋势研究

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: