开源一STM32项目,CAN,UART,Input检测 原创相对高效性能与代码重用平衡思路,可直接做工程模板

上传者: xsky | 上传时间: 2021-06-01 16:38:23 | 文件大小: 1.27MB | 文件类型: RAR
1、CAN收发队列 使用内存FIFO缓冲CAN帧,适合大数据量通信;并使用内部软中断处理CAN数据,相当于事件响应,综合应该比查询方式节省不少时间,也应该比OS调度省点时间。Can.C:底层处理,Communi.C:与应用层高相关。 应用层处理流程用函数指针表的方式调用减少代码量及阅读整齐;实现CAN各种错误记录机制。已初步测试,该机制可用。 CAN处理流程: 接收:CAN1_RX0_IRQHandler_Name (void), CAN1_RX1_IRQHandler(void) 接收中断,CAN_QueueWriteQuick()将当前的有效报文压入内存FIFO,压入的数据为整个CAN邮箱数据,所以后续的处理函数可以分辨出完整的数据。 void CAN1_RX0_IRQHandler_Name (void) // CAN1_RX0_IRQHandler_Name { /* FIFO从空状态开始,在接收到第一个有效的报文后,FIFO状态变为挂号_1(pending_1), 硬件相应地把CAN_RFR寄存器的FMP[1:0]设置为’01’(二进制01b)。 软件可以读取FIFO输出邮箱来读出邮箱中的报文,然后通过对CAN_RFR寄存器的RFOM位 设置’1’来释放邮箱,这样FIFO又变为空状态了。如果在释放邮箱的同时, 又收到了一个有效的报文,那么FIFO仍然保留在挂号_1状态,软件可以读取FIFO 输出邮箱来读出新收到的报文。 如果应用程序不释放邮箱,在接收到下一个有效的报文后,FIFO状态变为 挂号_2(pending_2),硬件相应地把FMP[1:0]设置为’10’(二进制10b)。 重复上面的过程,第三个有效的报文把FIFO变为挂号_3状态(FMP[1:0]=11b)。 此时,软件必须对RFOM位设置1来释放邮箱,以便FIFO可以有空间来存放下一个有效的 报文;否则,下一个有效的报文到来时就会导致一个报文的丢失。 */ while (CAN1->RF0R & CAN_RF0R_FMP0) // message pending ? { CAN_QueueWriteQuick(&CanRxQueue;, (T_CanFrame *)&CAN1;->sFIFOMailBox[CAN_FIFO0]); CAN1->RF0R |= CAN_RF0R_RFOM0; // Release FIFO 0 output mailbox #if CAN1_SWI_HANDLE_EN > 0 /* Add by Xsky 2011-06-18 15:48 */ EXTI->SWIER |= CAN1_SWI_EXTI_LINE; /* Add by Xsky 2011-06-18 15:47 */ #endif } } void CAN1_RX1_IRQHandler (void) { while (CAN1->RF1R & CAN_RF1R_FMP1) // message pending ? { CAN_QueueWriteQuick(&CanRxQueue;, (T_CanFrame *)&CAN1;->sFIFOMailBox[CAN_FIFO1]); CAN1->RF1R |= CAN_RF1R_RFOM1; // Release FIFO 1 output mailbox #if CAN1_SWI_HANDLE_EN > 0 /* Add by Xsky 2011-06-18 15:48 */ EXTI->SWIER |= CAN1_SWI_EXTI_LINE; /* Add by Xsky 2011-06-18 15:47 */ #endif } } 接收中断响应后,触发STM32的内部软中断(EXTI->SWIER |= CAN1_SWI_EXTI_LINE;), 实现当CAN硬件中断响应完成后,触发更低优先级的中断去处理内存中的CAN数据队列,如果处理时再发生新的CAN硬件接收中断,则会先响应硬件中断,以减少或不丢失CAN FIFO邮箱数据。处理函数在Communi.C中实现。 发送,CAN_SendFrame(): 发送时如果邮箱有空则直接将数据压入邮箱,否则将数据压入内存发送队列。等待上一次数据发送完成时,在发送中断中提取FI

文件下载

资源详情

[{"title":"( 189 个子文件 1.27MB ) 开源一STM32项目,CAN,UART,Input检测 原创相对高效性能与代码重用平衡思路,可直接做工程模板","children":[{"title":"DolphinGames_SI.PFI <span style='color:#111;'> 484B </span>","children":null,"spread":false},{"title":"DolphinGames.uvproj - 快捷方式.lnk <span style='color:#111;'> 1.05KB </span>","children":null,"spread":false},{"title":"源码说明.txt <span style='color:#111;'> 8.48KB </span>","children":null,"spread":false},{"title":"DolphinGames_SI.IMD <span style='color:#111;'> 3.21KB </span>","children":null,"spread":false},{"title":"DolphinGames_SI.WK3 <span style='color:#111;'> 151.76KB </span>","children":null,"spread":false},{"title":"......","children":null,"spread":false},{"title":"<span style='color:steelblue;'>文件过多,未全部展示</span>","children":null,"spread":false}],"spread":true}]

评论信息

  • cimxx :
    代码不错,有参考意义的
    2017-08-19
  • wdjz1 :
    不错 正在找这方面的资料 谢谢分享
    2017-01-30
  • nuanuan9 :
    资源还不错,挺有参考意义的
    2016-11-30
  • xyq857086792 :
    非常不错,值得借鉴
    2016-03-03
  • 芯联智网 :
    东西写得还是不错的,值得参考
    2015-11-10

免责申明

【只为小站】的资源来自网友分享,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,【只为小站】 无法对用户传输的作品、信息、内容的权属或合法性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论 【只为小站】 经营者是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。
本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二条之规定,若资源存在侵权或相关问题请联系本站客服人员,zhiweidada#qq.com,请把#换成@,本站将给予最大的支持与配合,做到及时反馈和处理。关于更多版权及免责申明参见 版权及免责申明