• 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
  • 微信公众号
您的位置:首页 > 程序设计 >嵌入式开发 > STM32F103VCCAN在20K波特率时接收丢帧1%,在250K时完全正常

STM32F103VCCAN在20K波特率时接收丢帧1%,在250K时完全正常

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

佚名通过本文主要向大家介绍了250k,250k是多少钱,250kb/s,250k图片,dnm 02w 250k 21b等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:STM32F103VC CAN 在20K波特率时接收丢帧1%,在250K时完全正常
描述:

CAN 接收 丢帧 STM 单片机CAN 丢帧 STM32 单片机 接收

各位大大, 小弟, 最近做一个单片机CAN通信的项目, 用的单片机为STM32F103VC,  控制器为NXP的JA1040
设置波特率为20K,帧间发送间隔为100 ms时 总是有1%左右的丢帧率(2000条丢20条左右). 设成20K,发送间隔为500ms时接收正常,没有出现丢帧现象. 期间我已经将CAN接收的中断优先级设为抢占最高级了, 确实找不到软件方面还有其他什么原因.
   而我把发送波特率改为250K时, 接收一切正常,查了好久帧间发送间隔改为50ms仍然能接收正常.小于50ms,由于buffer的原因申请不到缓存,所以不确定能否接收正常.
请各位大大帮忙分析下是哪方面的原因???是我设置的问题还是??
我用的是12M晶振, 72M主频!
void  CAN1Init(void)
{ 
    GPIO_InitTypeDef        GPIO_InitStructure; 
//    NVIC_InitTypeDef        NVIC_InitStructure; 
    CAN_InitTypeDef         CAN_InitStructure; 
    CAN_FilterInitTypeDef   CAN_FilterInitStructure; 
    /* Configure CAN1 IOs        */
    /* GPIOA, AFIO clocks enable */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA, ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); 
    /* Can Rx */
    GPIO_InitStructure.GPIO_Pin  =  GPIO_Pin_11; 
    GPIO_InitStructure.GPIO_Mode =  GPIO_Mode_IPU; 
    GPIO_Init(GPIOA,&GPIO_InitStructure); 
    /* Can Tx */
    GPIO_InitStructure.GPIO_Pin  =  GPIO_Pin_12; 
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
    GPIO_InitStructure.GPIO_Mode =  GPIO_Mode_AF_PP; 
    GPIO_Init(GPIOA,&GPIO_InitStructure); 
    /* CAN1 and CAN2 register init */
    CAN_DeInit(CAN1);
    /* Struct init*/
    CAN_StructInit(&CAN_InitStructure);
    /* CAN1 cell init */
    CAN_InitStructure.CAN_TTCM = DISABLE;                       // time triggered comnunication mode
    CAN_InitStructure.CAN_ABOM = DISABLE;                       // automatic bus off management
    CAN_InitStructure.CAN_AWUM = DISABLE;                       // automatic wakeup mode
    CAN_InitStructure.CAN_NART = DISABLE;                       // no automatic retransmission
    CAN_InitStructure.CAN_RFLM = DISABLE;                       // receive FIFO locked mode
    CAN_InitStructure.CAN_TXFP = DISABLE;                       // transmit FIFO priority
    CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
    CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;  
    CAN_InitStructure.CAN_BS1 = CAN_BS1_3tq;
    CAN_InitStructure.CAN_BS2 = CAN_BS2_2tq;
#if CAN_BAUDRATE == 1000 /* 1MBps */
    CAN_InitStructure.CAN_Prescaler =6;
#elif CAN_BAUDRATE == 500 /* 500KBps */
    CAN_InitStructure.CAN_Prescaler =12;
#elif CAN_BAUDRATE == 250 /* 250KBps */
    CAN_InitStructure.CAN_Prescaler =24;
#elif CAN_BAUDRATE == 125 /* 125KBps */
    CAN_InitStructure.CAN_Prescaler =48;
#elif CAN_BAUDRATE == 100 /* 100KBps */
    CAN_InitStructure.CAN_Prescaler =60;
#elif CAN_BAUDRATE == 50 /* 50KBps */
    CAN_InitStructure.CAN_Prescaler =120;
#elif CAN_BAUDRATE == 20 /* 20KBps */
    CAN_InitStructure.CAN_Prescaler =300;
#elif CAN_BAUDRATE == 10 /* 10KBps */
    CAN_InitStructure.CAN_Prescaler =600;
#else
#error "Please select the CAN Baudrate in Private defines"
#endif  /* CAN_BAUDRATE == 1000 */
    /*Initializes the CAN1  and CAN2 */
    CAN_Init(CAN1, &CAN_InitStructure);
    /* CAN filter init */
    CAN_FilterInitStructure.CAN_FilterNumber         = 0;                     /* 指定了待初始化的过滤器0 */
    CAN_FilterInitStructure.CAN_FilterMode           = CAN_FilterMode_IdMask; /* 指定了过滤器将被初始化到的模式为标识符屏蔽位模式 */
    CAN_FilterInitStructure.CAN_FilterScale          = CAN_FilterScale_32bit; /* 给出了过滤器位宽1个32位过滤器 */
    CAN_FilterInitStructure.CAN_FilterIdHigh         = 0x0000;    /* 用来设定过滤器标识符(32位位宽时为其高段位,16位位宽时为第一个) */
    CAN_FilterInitStructure.CAN_FilterIdLow          = 0x0000;    /* 用来设定过滤器标识符(32位位宽时为其低段位,16位位宽时为第二个)  */
    CAN_FilterInitStructure.CAN_FilterMaskIdHigh     = 0x0000;    /* 用来设定过滤器屏蔽标识符或者过滤器标识符(32位位宽时为其高段位,16位位宽时为第一个) */ 
    CAN_Fil
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

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

  • STM32F103VCCAN在20K波特率时接收丢帧1%,在250K时完全正常

相关文章

  • 2017-06-05 网卡<混杂模式>驱动程序开发================
  • 2017-06-05 stm8s系列的单片机纯软件模拟usb11(非usb单片机)
  • 2017-06-05 高分求教,在线等待中。。。。。
  • 2017-06-05 新手求助:怎么判断A/D转换的模拟输入量?
  • 2017-06-05 请教!!!!!!!!!!!
  • 2017-06-05 请问谁做过cy7c68013a在linux上的usb驱动?
  • 2017-06-05 并口编程的入门问题
  • 2017-06-05 IAR中为什么有些执行语句会直接跳过
  • 2017-06-05 新新手求指导pic18系列单片机问题~求高手指导
  • 2017-06-05 使ARM板上linux内核支持ppp,我应该如何做啊?

文章分类

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

最近更新的内容

    • 求救:网卡NIC地址,与IPV4地址是不是同一回事?
    • 我想问一下zigbee的稳定性怎么样??
    • 请问一张ARM7的开发板多少钱啊,我考虑买一张啊!
    • GSM模块的问题
    • 虚拟存储器是否真实存在于硬盘中
    • 我移植了8191su,然后用wpa_supplicant运行,/wpa_cli报错
    • stringbuffer内存被谁消耗了?非RSS/Buffer/Cache/Slab
    • 马上大四了,选择就业,正在纠结深圳和北京这两个城市
    • 请问如何反编译VXD文件
    • 在vmware虚拟机中能用soft-ice吗?

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

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