KEAZ128中MSCAN的同步时钟初始化失败已解决

文章目录

  • 运行环境:
  • MSCAN初始化成功代码
  • 初始化流程图
  • 初始化失败分析
  • 初始化异常原因

运行环境:

MSCAN初始化代码(采用24MHz总线时钟当时不行,于是直接采用了外部晶振时钟16MHz)

MSCAN初始化成功代码

void CAN_Init(uint_8 mode,uint_8 open_filter,uint_32 acc_id)
{uint_8 i;//对CAN_EN和CAN_STB置高,进入正常模式gpio_init(CAN_EN, GPIO_OUTPUT, TURN_ON);gpio_init(CAN_STB, GPIO_OUTPUT, TURN_ON);gpio_init(CONTROL, GPIO_OUTPUT, TURN_OFF);MSCAN_MemMapPtr p = (MSCAN_MemMapPtr) MSCAN_BASE_PTR;//MSCAN模块时钟门控制;SIM_SCGC的MSCAN位=1:使能总线给MSCAN时钟;//SIM_SCGC的MSCAN位=0:禁止总线给MSCAN时钟SIM_SCGC |=(uint_32)(SIM_SCGC_MSCAN_MASK);//MSCAN的引脚复用选择CAN_TX为PTC7,CAN_RX为PTC6SIM_PINSEL1 &= (uint_32)~(uint_32)(SIM_PINSEL1_MSCANPS_MASK);MSCAN->CANCTL0 |= MSCAN_CANCTL0_INITRQ_MASK;  //MSCAN初始化请求while(!(MSCAN->CANCTL1 & MSCAN_CANCTL1_INITAK_MASK)){;} //等待初始化模式确认MSCAN->CANCTL1 =0x80; //使能MSCAN 选择OSC时钟  if(open_filter)         //开启接收过滤器,只接收标示符为acc_id的帧{// 使用2个32位接收过滤器p->CANIDAC &= ~MSCAN_CANIDAC_IDAM_MASK;// 第1个32位滤波器// 设置接受寄存器的值p->CANIDAR_BANK_1[0]=acc_id>>3;p->CANIDAR_BANK_1[1]=acc_id<<5;p->CANIDAR_BANK_1[2]=0xFF;p->CANIDAR_BANK_1[3]=0xFF;// 设置屏蔽寄存器的值p->CANIDMR_BANK_1[0]=0x00;p->CANIDMR_BANK_1[1]=0x1F;p->CANIDMR_BANK_1[2]=0xFF;p->CANIDMR_BANK_1[3]=0xFF;// 第2个32位滤波器// 设置接受寄存器的值p->CANIDAR_BANK_2[0]=acc_id>>3;p->CANIDAR_BANK_2[1]=acc_id<<5;p->CANIDAR_BANK_2[2]=0xFF;p->CANIDAR_BANK_2[3]=0xFF;// 设置屏蔽寄存器的值p->CANIDMR_BANK_2[0]=0x00;p->CANIDMR_BANK_2[1]=0x1F;p->CANIDMR_BANK_2[2]=0xFF;p->CANIDMR_BANK_2[3]=0xFF;}else//关闭过滤器{for (i = 0; i < 16; i++){if(i <=3)			//i>=0 && p->CANIDAR_BANK_1[i] = 0xFF;else if(i>=4 && i <=7)p->CANIDMR_BANK_1[i-4] = 0xFF;else if(i>=8 && i <=11)p->CANIDAR_BANK_2[i-8] = 0xFF;elsep->CANIDMR_BANK_2[i-12]= 0xFF;}}//配置时钟p->CANCTL1 &= ~MSCAN_CANCTL1_CLKSRC_MASK;    // 采用晶振时钟(16MHz)作为模块时钟p->CANBTR0 |= MSCAN_CANBTR0_SJW(2);p->CANBTR1 &= ~MSCAN_CANBTR1_SAMP_MASK;     // 位时间采样次数为1// MSCAN传输波特率 = 模块时钟 / [(1 + TSEG1 + TSEG2) * 分频因子]//                = 16000K/[(1+4+11)*2]=500Kbps//500K   BRP=1   TSEG1=15   TSEG2=2p->CANBTR0 |= MSCAN_CANBTR0_BRP(1);        // 模块时钟2分频p->CANBTR1 |= MSCAN_CANBTR1_TSEG2(3);      // TSEG2:3+1=4 Tqp->CANBTR1 |= MSCAN_CANBTR1_TSEG1(10);     // TSEG1:10+1=11 Tq//配置工作模式if(mode == LOOP_MODE){MSCAN->CANCTL1 |= MSCAN_CANCTL1_LOOPB_MASK;}else{MSCAN->CANCTL1 &= ~MSCAN_CANCTL1_LOOPB_MASK;}p->CANCTL1 &= ~MSCAN_CANCTL1_LISTEN_MASK;   // 禁止侦听模式,即开启正常模式//退出初始化模式p->CANCTL0 &= ~MSCAN_CANCTL0_INITRQ_MASK;   //退出初始化模式,进入正常模式//等待应答初始化模式while ((p->CANCTL1 & MSCAN_CANCTL1_INITAK_MASK) == 1);//等待总线通信时钟同步while ((p->CANCTL0 & MSCAN_CANCTL0_SYNCH_MASK) == 0);//设置中断方式p->CANTIER = 0x00;                          //禁止发送中断p->CANRIER = 0x01;                          //开启接收满中断//设置嵌套向量中断控制寄存器值,使能CAN接收中断NVIC_Init(MSCAN_RX_IRQn,2);gpio_set(CONTROL,GPIO_HIGH);
}

初始化流程图

在这里插入图片描述

初始化失败分析

任何正在进行的传输或接收都将中止,与CAN总线的同步将丢失。该模块通过设置INITAK = 1来指示进入初始化模式。

初始化异常原因

导致我们初始化时钟域请求失败的原因可能有:
1.CAN芯片是否存在且正常供电(同网上要有外联CANH-CANL节点)
2.CAN芯片是否损坏
3.保证电源电压至少为CAN芯片最低工作电压

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/336509.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java开发中如何使用定时任务

定时任务概述&#xff1a; 任务调度&#xff1a; 是指系统为了自动完成特定任务&#xff0c;在约定的特定时刻执行任务的过程。有了任务调度&#xff0c;即可解放更多的人力&#xff0c;而是由系统自动去执行任务。 常用业务场景案例&#xff1a; 某电商系统需要在每天上午10点…

CHS_03.1.3.3+系统调用

CHS_03.1.3.3系统调用 系统调用什么是系统调用&#xff0c;有何作用&#xff1f;系统调用又和普通的库函数的调用又有一定的区别为什么系统调用是必须的系统调用 按功能分类 可以分为这样的一些系统调用系统调用过程 这个小节的全部内容 系统调用 相关的知识 我们会为大家介绍什…

vulhub中的Apache HTTPD 多后缀解析漏洞详解

Apache HTTPD 多后缀解析漏洞 1.查看python版本 这里python版本很重要&#xff0c;因为版本过低可能会导致后面的结果运行不成功 这里我就遇到了因为版本过低而执行不了docker-compose up -d的情况 查看python版本 cd /usr/bin ls -al python* 当版本过低时安装高版本的 …

STM32-04-STM32时钟树

STM32时钟树 什么是时钟&#xff1f; 时钟是具有周期性的脉冲信号&#xff0c;最常用的是占空比50%的方波。&#xff08;时钟是单片机的脉搏&#xff0c;搞懂时钟走向及关系&#xff0c;对单片机使用至关重要&#xff09;。 时钟树 时钟源 2个外部时钟源 高速外部振荡器(HSE…

简单几个步骤几行代码一步一步掌握NLP自然语言处理通过Transformers模型实现包括情感分析,垃圾邮件检测,语法纠错,文本推理等

简单几个步骤几行代码一步一步掌握NLP自然语言处理通过Transformers模型实现包括情感分析,垃圾邮件检测,语法纠错,文本推理等。 垃圾邮件是广告、欺诈或其他不相关信息的电子邮件,给我们的日常工作和生活带来了困扰。为了有效过滤和阻止垃圾邮件的到达,我们需要使用各种判断…

安卓(雷电)模拟器清除屏幕密码

1、设置磁盘可写 启动模拟器&#xff0c;然后在模拟器的设置界面&#xff0c;设置磁盘共享为可写入&#xff0c;重启模拟器&#xff0c;如下图&#xff1a; 2、找到模拟器目录 返回桌面&#xff0c;右键模拟器图标&#xff0c;打开文件所在目录&#xff0c;如下图&#xff1a…

Spring MVC组件及RequestMapping注解

springmvc组件 DispatcherServlet前端控制器 用户请求到达前端控制器&#xff0c;它就相当于mvc模式中的c&#xff0c;dispatcherServlet 是整个流程控制的中心&#xff0c;由它调用其它组件处理用户的请求&#xff0c;dispatcherServlet 的存在降低了组件之间的耦合性。 Ha…

四、Java中SpringBoot组件集成接入【Knife4j接口文档(swagger增强)】

四、Java中SpringBoot组件集成接入【Knife4j接口文档&#xff08;swagger增强&#xff09;】 1.Knife4j介绍2.maven依赖3.配置类4.常用注解使用1.实体类及属性&#xff08;ApiModel和ApiModelProperty&#xff09;2.控制类及方法&#xff08;Api、ApiOperation、ApiImplicitPar…

vue+springboot+mybatis-plus实现乡村公共文化服务系统

项目前端&#xff1a;https://gitee.com/anxin-personal-project/rural-public-cultural-services-front 项目后端&#xff1a;https://gitee.com/anxin-personal-project/rural-public-cultural-services-behind 1.系统简介 乡村公共服务文化提供给管理员、商家、村民。管理…

面相圆润是有福气的象征

在中国传统文化中&#xff0c;面相是一个非常重要的概念。相信大家肯定听说过“相由心生”这个成语吧&#xff0c;这就是告诉我们&#xff0c;一个人的面貌其实是可以反映出他内心的状态和气质&#xff0c;也可以反映其性格、健康状况和运势等。而一个圆润的面相&#xff0c;则…

SpringBoot 配置文件加载优先级

SpringBoot 配置文件加载优先级 前言SpringBoot 配置文件加载优先级 前言 最近在使用k8s部署项目的时候,发现Dockerfile文件中的命令后面跟的参数,无法覆盖nacos中的参数,今天有时间正好来整理一下Springboot配置的加载顺序 SpringBoot 配置文件加载优先级 整理加载顺序第一个肯…

合宙“全球通“模组Air795UG上市,支持4G+2G全球频段

简介 全球化浪潮之下&#xff0c;各物联网厂商纷纷激流勇进。有的已经在海外开拓一番天地&#xff0c;有的磨刀霍霍准备杀向海外&#xff0c;可谓“国内卷完&#xff0c;国外卷”。 合宙作为物联网设备的核心供应商&#xff0c;自然要为行业客户出海助力。针对海外区域网络设备…