当前位置:首页 > 单片机 > 单片机
[导读]一、背景: 还是继续CAN通信,要节省开发时间,使用库函数可大大降低开发周期,并且还能确保寄存器的配置几 乎是万无一失,所以,在此就STM32F10xx的CAN操作库函数的使用做个简析。 STM32有库函数这件事,对软

一、背景:

还是继续CAN通信,要节省开发时间,使用库函数可大大降低开发周期,并且还能确保寄存器的配置几

乎是万无一失,所以,在此就STM32F10xx的CAN操作库函数的使用做个简析。

STM32有库函数这件事,对软件开发人员来说是极其利好的,对库函数有褒有贬,说不好的,无非就是

库函数会占用一些额外Ram,并且不利于新手对于这款单片机更深层次的理解等等。我倒觉得,不应当有这

些顾虑,首先,库函数那都是由一些非常牛,并且对该型MCU极其了解的厂方工作人员编写,不去说万无一

失,但也是绝对按照标准来的好东西;其次,开发最重要的既是时间,先利用库函数实现快速开发,如若需

要深层次定制或者更改,再来对其进行研究,这样就可以节省时间去完成别人还未做过的事情,然后自己努

力去变成一个为别人提供库函数的人 :) ;至于新手,若需要知道如何正确使用库函数,必然会去研究手册

上那些东西。所以,推荐有库函数则优先使用库函数。貌似跑题了 - -! 继续,开始正文。


二、正文:

1、void CAN_DeInit(CAN_TypeDef* CANx)

// 操作APB1外设复位寄存器。对CAN进行复位操作。

// 在STM32F10xx中,CAN的时钟由APB1分频提供。

2、uint8_t CAN_Init(CAN_TypeDef* CANx, CAN_InitTypeDef* CAN_InitStruct)

// 根据CAN_InitStruct结构体(详见以下),对CAN进行初始化操作。

typedef struct

{

// CAN_Mode(Loop back mode)

/* 0: 禁止环回模式。

* 1:允许环回模式。

*/

uint8_t CAN_Mode;

// 以下4个参数,决定了CAN的波特率(具体如何配置,网上有计算工具)

uint16_t CAN_Prescaler;

uint8_t CAN_SJW;

uint8_t CAN_BS1;

uint8_t CAN_BS2;

// TTCM(Time Triggered communication mode)

/* 在该模式下,CAN硬件的内部定时器被激活,并且被用于产生(发送与接收邮箱的)时间戳,

* 分别存储在CAN_RDTxR/CAN_TDTxR寄存器中。内部定时器在每个CAN位时间(见22.7.7节)累加。

* 内部定时器在接收和发送的帧起始位的采样点位置被采样,并生成时间戳。

*/

FunctionalState CAN_TTCM;

// ABOM(Automatic Bus-off managerment)

/* 0:软件对CAN_MCR寄存器的INRQ位置"1"随后清"0"后,一旦硬件检测到128次11位连续的隐形位,

* 则退出离线状态。

* 1:硬件检测到128次11位连续的隐形位,则自动退出离线状态。

*/

FunctionalState CAN_ABOM;

// AWUM (Automatic wakeup mode)

/* 0:由软件清除CAN_MCR的"SLEEP"位后,唤醒睡眠模式。

* 1:检测到报文,由硬件自动唤醒,且自动清零"SLEEP""SLAK"

*/

FunctionalState CAN_AWUM;

// NART(No Automatic retransmission)

/* 0:按照CAN标准,CAN硬件在发送报文失败后会一直重新发送直至发送成功。

* 1:CAN报文只发送一次。不管发送结果如何。

*/

FunctionalState CAN_NART;

// RFLM (Receive FIFO Locked mode)

/* 0:接收溢出后,FIFO未被锁定,即报文会被新报文覆盖。

* 1:接收溢出后,FIFO被锁定,即新报文会被丢弃。

*/

FunctionalState CAN_RFLM;

// TXFP(Transmit FIFO priority)

/* 0:优先级由报文的标识符来决定。

* 1:优先级由发送请求的顺序来决定。

*/

FunctionalState CAN_TXFP;

// FunctionalState-----------------------------------------------------|

} CAN_InitTypeDef; |

|

typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;<------------|

3、void CAN_StructInit(CAN_InitTypeDef* CAN_InitStruct)

// 将所有的CAN设置均设置为初始值。

4、void CAN_FilterInit(CAN_FilterInitTypeDef* CAN_FilterInitStruct)

// 根据结构体CAN_FilterInitStruct(详见如下)对CAN滤波进行初始化操作。

typedef struct

{

// CANFxR1 高16位

uint16_t CAN_FilterIdHigh;

// CANFxR1 低16位

uint16_t CAN_FilterIdLow;

// CANFxR2 高16位

uint16_t CAN_FilterMaskIdHigh;

// CANFxR2 低16位

uint16_t CAN_FilterMaskIdLow;

// 对应哪一个过滤器

uint8_t CAN_FilterNumber;

// 对应的CAN_FilterNumber过滤器模式选择(FM1R)

/* 过滤器组(14组)的2个32位寄存器工作在标识符屏蔽位模式。

* 过滤器组(14组)的2个32位寄存器工作在标识符列表模式。

*/

uint8_t CAN_FilterMode;

// 对应的CAN_FilterNumber过滤器位宽设置(CAN_FS1R)

/* CAN_FilterScale_16bit: 两个16位过滤器

* CAN_FilterScale_32bit: 单个32位过滤器

*/

uint8_t CAN_FilterScale;

// 报文被过滤后,存放的哪个FIFO中。(CAN_FFA1R)

// 每个FIFO可以存放3条报文。

/* CAN_Filter_FIFO0: 过滤器被关联到了FIFO0

* CAN_Filter_FIFO1: 过滤器被关联到了FIFO1

*/

uint16_t CAN_FilterFIFOAssignment;

// 是否使能对应的CAN_FilterNumber滤波器

FunctionalState CAN_FilterActivation;

} CAN_FilterInitTypeDef;

5、void CAN_DBGFreeze(CAN_TypeDef* CANx, FunctionalState NewState)

/* 调试冻结,即在调试时,CAN有两种工作模式

* -->照常工作

* -->冻结其收发,但仍可对FIFO进行读写。

* 操作寄存器为"CAN_MCR"的"DBF"位(Debug Freeze)。

*/

6、void CAN_SlaveStartBank(uint8_t CAN_BankNumber)

/* 内部对CAN过滤器主控制器(CAN_FMR)进行操作。

* 功能

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

特朗普集团近日取消了其新推出的T1智能手机“将在美国制造”的宣传标语,此举源于外界对这款手机能否以当前定价在美国本土生产的质疑。

关键字: 特朗普 苹果 AI

美国总统特朗普在公开场合表示,他已要求苹果公司CEO蒂姆·库克停止在印度建厂,矛头直指该公司生产多元化的计划。

关键字: 特朗普 苹果 AI

4月10日消息,据媒体报道,美国总统特朗普宣布,美国对部分贸易伙伴暂停90天执行新关税政策,同时对中国的关税提高到125%,该消息公布后苹果股价飙升了15%。这次反弹使苹果市值增加了4000多亿美元,目前苹果市值接近3万...

关键字: 特朗普 AI 人工智能 特斯拉

3月25日消息,据报道,当地时间3月20日,美国总统特朗普在社交媒体平台“真实社交”上发文写道:“那些被抓到破坏特斯拉的人,将有很大可能被判入狱长达20年,这包括资助(破坏特斯拉汽车)者,我们正在寻找你。”

关键字: 特朗普 AI 人工智能 特斯拉

1月22日消息,刚刚,新任美国总统特朗普放出重磅消息,将全力支持美国AI发展。

关键字: 特朗普 AI 人工智能

特朗普先生有两件事一定会载入史册,一个是筑墙,一个是挖坑。在美墨边境筑墙的口号确保边境安全,降低因非法移民引起的犯罪率过高问题;在中美科技产业之间挖坑的口号也是安全,美国企业不得使用对美国国家安全构成威胁的电信设备,总统...

关键字: 特朗普 孤立主义 科技产业

据路透社1月17日消息显示,知情人士透露,特朗普已通知英特尔、铠侠在内的几家华为供应商,将要撤销其对华为的出货的部分许可证,同时将拒绝其他数十个向华为供货的申请。据透露,共有4家公司的8份许可被撤销。另外,相关公司收到撤...

关键字: 华为 芯片 特朗普

曾在2018年时被美国总统特朗普称作“世界第八奇迹”的富士康集团在美国威斯康星州投资建设的LCD显示屏工厂项目,如今却因为富士康将项目大幅缩水并拒绝签订新的合同而陷入了僵局。这也导致富士康无法从当地政府那里获得约40亿美...

关键字: 特朗普 富士康

今年5月,因自己发布的推文被贴上“无确凿依据”标签而与推特发生激烈争执后,美国总统特朗普签署了一项行政令,下令要求重审《通信规范法》第230条。

关键字: 谷歌 facebook 特朗普

众所周知,寄往白宫的所有邮件在到达白宫之前都会在他地进行分类和筛选。9月19日,根据美国相关执法官员的通报,本周早些时候,执法人员截获了一个寄给特朗普总统的包裹,该包裹内包含蓖麻毒蛋白。

关键字: 美国 白宫 特朗普
关闭