• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >嵌入式开发 > 对使用STM32cube生成的HAL库CAN初始化函数HAL_CAN_Init的一个疑问

对使用STM32cube生成的HAL库CAN初始化函数HAL_CAN_Init的一个疑问

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-05

佚名通过本文主要向大家介绍了stm32cube hal,cube hal,hal init,hal board init,hal gpio init等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 对使用STM32cube生成的HAL库CAN初始化函数HAL_CAN_Init的一个疑问
描述:

本帖最后由 hducollins 于 2017-03-09 10:02:17 编辑

HAL库CAN初始化模式退出INAK


HAL库中CAN的初始化函数  HAL_CAN_Init(CAN_HandleTypeDef* hcan)  的步骤大致如下:
1、退出睡眠模式;
2、请求进入初始化模式,并等待初始化确认标志INAK置位;
3、INAK标志位置位后进行初始化配置;
4、请求退出初始化模式,并等待确认初始化模式退出;
在HAL库的CAN初始化函数中,上述红色字体部分代码如下:
HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef* hcan)
{
    。
    。
    。
    /* Request leave initialisation */
    CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_INRQ);
    /* Get timeout */
    tickstart = HAL_GetTick();   
    /* Wait the acknowledge */
    while(HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_INAK))
    {
      if((HAL_GetTick()-tickstart) > CAN_TIMEOUT_VALUE)
      {
        hcan->State= HAL_CAN_STATE_TIMEOUT;
        /* Process unlocked */
        __HAL_UNLOCK(hcan);
        return HAL_TIMEOUT;
      }
    }
    /* Check acknowledged */
    if (HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK))
    {
      status = CAN_INITSTATUS_SUCCESS;
    }
  }
    。
    。
    。
}
有疑问的地方是代码中紫色字体的两行代码,因为在请求退出初始化模式之前,初始化模式标志位INAK是等于‘1’的,
然后在程序执行CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_INRQ)请求退出初始化模式之后,我们期望INAK被清‘0’,
所以应该是使用while()循环等待INAK从1变为0才对,也就是INAK=1的时候等待,INAK=0时退出while()循环;
但上述程序中却是INAK=0的时候等待,INAK=1的时候退出while()循环。
参考手册中对于退出初始化模式的描述如下:
清除CAN_MCR寄存器的INRQ位为'0',请求bxCAN退出初始化模式,当硬件对CAN_MSR寄存
器的INAK位清'0',就确认了初始化模式的退出。
有知道原因的请指点一下,谢谢!


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 对使用STM32cube生成的HAL库CAN初始化函数HAL_CAN_Init的一个疑问

相关文章

  • 2017-06-05 高分求打印机驱动开发的资料
  • 2017-06-05 我们自己的群QQ:2878431CSDN的朋友们大家一起进步
  • 2017-06-05 热释电红外传感器(PIR)中的一些参数理解,请教
  • 2017-06-05 求解都可能有哪些原因能让MCU自动复位或类似自动复位?
  • 2017-06-17UART异步串行接口
  • 2017-06-05 谁知道单片机开发怎么入门啊
  • 2017-06-05 请教哪里有vxd和vmm服务的手册下载?
  • 2017-06-05 s3c2416板子的LCD驱动(驱动IC:ILI9486)如何写?
  • 2017-06-05 求助,希望做一个利用GPRS的远程监控系统
  • 2017-06-05 javarxtx获取不到串口数据

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • cc2640从机如何自动使能notify功能?
    • vs2005-Wince60-cortexA9的可行性?
    • 摄像头采集到的图像会变暗OPENCV
    • 新新手求指导pic18系列单片机问题~求高手指导
    • wince60pc与设备连接问题
    • 68013A50p固件搞过的求指点
    • 关于RF卡的发卡程序
    • STM32测量频率,现在测试100K-130K频率误差在8HZ-12HZ,不过当每次测量频率变化,测量出来的数值有些不稳定有些波动4HZ,怎么解决这个问题呢
    • 用51单片机的红外控制步进电机的启停,但是步进电机不能正常停止,请教各位大神原因
    • 自动添加设备节点权限问题

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有