当前位置: 首页 > news >正文

郑州企业建站网站网站适配手机屏幕

郑州企业建站网站,网站适配手机屏幕,上海网络维护有哪些公司,查看网站是用什么做的相信大家在学习STM32系列的单片机时,在翻阅芯片的数据手册时,都会看到这么一个寄存器外设——CAN外设寄存器。那么,大家知道这个外设的工作原理以及该如何使用吗?这节的内容将会详细介绍STM32上的CAN外设,文章结尾附有…

相信大家在学习STM32系列的单片机时,在翻阅芯片的数据手册时,都会看到这么一个寄存器外设——CAN外设寄存器。那么,大家知道这个外设的工作原理以及该如何使用吗?这节的内容将会详细介绍STM32上的CAN外设,文章结尾附有相关代码帮助大家更好地掌握。

1.CAN外设(CAN控制器)介绍

STM32的芯片中具有bxCAN控制器(Basic Extended CAN),它支持CAN协议2.0A 和2.0B Active标准。(CAN2.0A只能处理标准数据帧且扩展帧的内容会织别错误。而CAN2.0 B Active可以处理标准数据帧和扩展数据帧。CAN2.0 B Passive只能处理标准数据帧而扩展帧的内容会被忽略)。

该CAN控制器支持最高的通讯速率为1Mb/s;可以自动地接收和发送CAN报文,支持使用标准ID和扩展ID的报文;外设中具有3个发送邮箱,发送报文的优先级可以使用软件控制,还可以记录发送的时间;具有2个3级深度的接收FIFO,可使用过滤功能只接收或不接收某些ID号的报文;可配置成自动重发;不支持使用DMA进行数据收发。

2.CAN控制器的3种工作模式

CAN控制器有3种工作模式:初始化模式,正常模式,睡眠模式。

上电复位后CAN控制器默认会进入睡眠模式,作用是降低功耗。当需要将进行初始的时候(配置寄存器),会进入初始化模式。当需要通讯的时候,就进入正常模式。

3.CAN控制器的3种测试模式

有3种测试模式:静默模式、环回模式、环回静默模式。当控制器进入初始化模式的时候才可以配置测试模式 。

静默模式可以用于检测总线的数据流量。环回模式可以用于自检(影响总线)。环回静默也是用于自检,不会影响到总线。

4.功能框图 

 ​​​​​​​主动内核

含各种控制/状态/配置寄存器,可以配置模式、波特率等。在STM32CubeMx中可以非常方便的配置。

​​​​​​​发送邮箱

用来缓存待发送的报文,最多可以缓存3个报文。发送调度决定报文的发送顺序。

​​​​​​​接收FIFO

共有2个接收FIFO,每个FIFO都可以存放3个完整的报文。它们完全由硬件来管理。从而节省了CPU的处理负荷,简化了软件并保证了数据的一致性。应用程序只能通过读取FIFO输出邮箱,来读取FIFO中最先收到的报文。

​​​​​​​接收滤波器(过滤器)

做用:对接到的报文进行过滤。最后放入FIFO 0或FIFO 1。

当总线上报文数据量很大时,总线上的设备会频繁获取报文,占用CPU。过滤器的存在,选择性接收有效报文,减轻系统负担。

有2种过滤模式:

  1. 标识符列表模式,它把要接收报文的ID列成一个表,要求报文ID与列表中的某一个标识符完全相同才可以接收,可以理解为白名单管理。
  2. 掩码模式(屏蔽位模式),它把可接收报文ID的某几位作为列表,这几位被称为掩码,可以把它理解成关键字搜索,只要掩码(关键字)相同,就符合要求,报文就会被保存到接收FIFO。

如果使能了筛选器,且报文的ID与所有筛选器的配置都不匹配,CAN外设会丢弃该报文,不存入接收FIFO。每个CAN提供了14个位宽可变的、可配置的过滤器组(13~0)。每个过滤器组x由2个32位寄存器,CAN_FxR1和 CAN_FxR2组成。

5.CAN通讯实验2:双击测试 :一发一收

5.1需求描述

使用2块STM32开发板实现CAN消息的发送和接收。一个发送数据,另外一个接收数据。

​​​​​​​5.2硬件设计

需要把2块开发的CAN_High连起来,CAN_Low连起来。连接如图所示。

​​​​​​​5.3软件设计(寄存器)

复制CAN通信案例1的寄存器版本工程2,一个用于发送,一个用于接收

​​​​​​​can.c注释掉下面2行代码,其他不用做任何变化。

/* 4.5 配置位时序寄存器 *//* 4.5.1 静默模式 用于调试 */// CAN1->BTR |= CAN_BTR_SILM;   /* 4.5.2 回环模式 用于调试 */
//   CAN1->BTR |= CAN_BTR_LBKM;

 ​​​​​​​main.c  发送

用于发送的工程只保留发送的代码即可。

#include "stm32f10x.h" // Device header
#include "usart.h"
#include "Delay.h"
#include "can.h"
#include "string.h"int main(void)
{usart1_init();printf("尚硅谷 CAN 通讯实验: 发送节点 寄存器版\r\n");CAN_Init();printf("CAN 初始化配置完成...\r\n");uint16_t stdId = 123;uint8_t *tData = "abcdef";while (1){CAN_SendMsg(stdId, tData, strlen((char *)tData));printf("发送完毕...\r\n");Delay_s(3);}
}

 ​​​​​​​main.c  接收

用于接收的工程只保留接收的代码即可。

#include "stm32f10x.h" // Device header
#include "usart.h"
#include "Delay.h"
#include "can.h"
#include "string.h"int main(void)
{usart1_init();printf("尚硅谷 CAN 通讯实验: 接收节点 寄存器版\r\n");CAN_Init();printf("CAN 初始化配置完成...\r\n");RxDataStruct rxDataStruct[8];uint8_t rxMsgCount;while (1){/* 1. 接收数据 */CAN_ReceiveMsg(rxDataStruct, &rxMsgCount);/* 2. 输出消息 */uint8_t i;for (i = 0; i < rxMsgCount; i++){RxDataStruct msg = rxDataStruct[i];printf("stdId = %d, length = %d, msgData = %s\r\n", msg.stdId, msg.length, msg.data);}}
}

 5.4软件设计(HAL库)

CubeMx设置

拷贝CAN通信实验1的HAL库版本工程2次。一个用于发送,一个用于接收。重新打开每个工程,把Test Mode改成 Normal即可,其他不用改变。然后重新生成代码。

 ​​​​​​​main.c 发送

int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_CAN_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 *//* 1. 配置过滤器 */CAN_Filter_Config();/* 2. 启动CAN总线 */HAL_CAN_Start(&hcan);printf("尚硅谷 CAN 发送实验...\r\n");while (1){uint16_t stdId = 0x011;uint8_t *tData = "abcdefg";CAN_SendMsg(stdId, tData, strlen((char *)tData));printf("发送完毕...\r\n");HAL_Delay(300);}
}

 ​​​​​​​main.c 接收

int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_CAN_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 *//* 1. 配置过滤器 */CAN_Filter_Config();/* 2. 启动CAN总线 */HAL_CAN_Start(&hcan);printf("尚硅谷 CAN 接收 实验...\r\n");/* 4. 接收数据 */RxDataStruct rxDataStruct[8];uint8_t rxMsgCount;while (1){CAN_ReceiveMsg(rxDataStruct, &rxMsgCount);/* 5. 输出消息 */uint8_t i;for (i = 0; i < rxMsgCount; i++){RxDataStruct msg = rxDataStruct[i];printf("stdId = %d, length = %d, msgData = %s\r\n", msg.stdId, msg.length, msg.data);}}
}

好了,以上就完成了两个32单片机之间的一发一收的整个流程了 

 

 

 

http://www.yayakq.cn/news/919401/

相关文章:

  • 在库言库建筑网站图文店做网站有用处吗
  • 网站开发 流程图永久虚拟主机
  • 宁波网站推广工具衡器行业网站建设模板
  • 重庆网站建设外包商务服饰网站建设
  • 制作简单门户网站步骤物联网平台介绍
  • 网站建设与维护面试做网站贵不
  • 做导购网站宿迁房产网二手房
  • 西安做网站公司有哪些网站备案信息更改审核要多久
  • 可以用足球做的游戏视频网站自己如何做网站建设
  • 网站建设管理要求重庆外贸网站建设公司排名
  • 门户网站维护方案博客网站是自己做的吗
  • 做网站上传的图片显示变形网站备案是否收费
  • 微信有网站开发吗长春网站建设索q479185700
  • 顺企网萍乡网站建设wordpress搬家教程
  • 做物流百度网站建设一个视频网站首页
  • 南阳河南网站建设wordpress 中文站
  • 如何创建一个和淘宝一样的网站手机黄山网站
  • 显示危险网站怎么解决吉林做网站的公司
  • 沈阳网站建设专家红河企业网络推广外包
  • 网站默认数据库地址购物网站开发的难点
  • 网站建设淮南简历旅游网站开发经验
  • 网站建设产品手册杭州网站提升排名
  • 张家界网站建设的公司没有域名可以做网站吗
  • 迁安市住房和城乡建设局网站建网站企划书
  • 怎么做html5网站吗杭州seo技术培训
  • 造价人员做兼职的网站外贸网站如何换域名
  • 阿里云专有网络做网站常德网站seo
  • 成都网站建设哪家好文章旅游最新政策
  • 网上商城运营方案网站优化吧
  • 洛阳网站在哪备案衣服搭配网站建设