can使能上拉 gpio_STM32实例CAN通信CAN 配置步骤

    前面我们用了很大篇幅介绍 CAN 总线和 STM32F1 的 CAN 控制器, 其实还是比较复杂的, 如果不明白没有关系, 我们可以先从软件层面上来学习怎么使用CAN,然后再回过头看这些理论知识,这样学习 CAN 应该会比较轻松。接下来我们就介绍下如何使用库函数对 CAN进行配置。这个也是在编写程序中必须要了解的。具体步骤如下:(CAN 相关库函数在 stm32f10x_can.c 和 stm32f10x_can.h文件中)

(1)使能 CAN 时钟,将对应引脚复用映射为 CAN 功能

    要使用 CAN,首先就是使能它的时钟,我们知道 CAN1 和 CAN2 是挂接在APB1总线上的,其发送和接收引脚对应不同的 STM32F1 IO(具体 IO 可以通过数据手册查找,也可以在我们原理图上查找),因此使能 CAN 时钟后,还需要使能对应端口的时钟,并且将其引脚配置为复用功能。因为我们使用的 STM32F103ZET6芯片只有一个 CAN, 即 CAN1, 其对应的 IO 是 PA11 (CAN1_RX) 和 PA12 (CAN1_TX) 。

    所以配置代码如下:

//使能相关时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能 PORTA时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);//使能 CAN1 时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; //PA11GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入模式GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //PA12GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO 口速度为 50MHzGPIO_Init(GPIOA, &GPIO_InitStructure);

(2)设置 CAN 工作模式、波特率等

    使能了 CAN 时钟后,接下来就可以通过 CAN_MCR 寄存器配置其工作模式、波特率大小等参数。库函数中提供了 CAN_Init()函数用来完成这一步骤,函数原型是:

uint8_t CAN_Init(CAN_TypeDef* CANx, CAN_InitTypeDef*CAN_InitStruct);

    函数中第一个参数是用来设置哪个 CAN,例如 CAN1;第二个参数是一个结构体指针变量,结构体类型是 CAN_InitTypeDef,其内包含了 CAN 工作模式及波特率初始化的成员变量。下面我们简单介绍下它的成员:

typedef struct{
    uint16_t CAN_Prescaler; //uint8_t CAN_Mode; //uint8_t CAN_SJW; //uint8_t CAN_BS1; //uint8_t CAN_BS2; //FunctionalState CAN_TTCM; //FunctionalState CAN_ABOM; //FunctionalState CAN_AWUM; //FunctionalState CAN_NART; //FunctionalState CAN_RFLM; //FunctionalState CAN_TXFP; //} CAN_InitTypeDef;

    CAN_Prescaler:用于设置 CAN 外设的时钟分频,它可控制时间片 tq 的时间长度,这里设置的值最终会加 1 后再写入 BRP 寄存器

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值