• 大小: 47KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-13
  • 语言: 其他
  • 标签: STM32  

资源简介

STM32的CAN通讯(直接操作寄存器),亲测可用。内有详细的注释和文档。很好的学习资料。

资源截图

代码片段和文件信息

/*----------------------------------------------------------------------------
QQ: 958664258
21IC用户名:banhushui
交流平台:http://blog.21ic.com/user1/5817/index.html

旺旺:半壶水电子
编译器版本:MDK4.12
 *---------------------------------------------------------------------------*/

#include                         // STM32F10x Library Definitions
#include “STM32_Reg.h“                            // STM32 register and bit Definitions
#include “STM32_Init.h“                           // STM32 Initialization
#include “CAN.h“                                  // STM32 CAN adaption layer

// CAN messge for sending
//CAN发送消息邮箱
CAN_msg       CAN_TxMsg;
// CAN message for receiving   
//CAN接收消息邮箱                       
CAN_msg       CAN_RxMsg;                                                          
// CAN HW ready to transmit a message
//发送就绪标志
unsigned int  CAN_TxRdy = 0;                      
// CAN HW received a message
//接收就绪标志
unsigned int  CAN_RxRdy = 0;                      

/*----------------------------------------------------------------------------
  setup CAN interface
 *----------------------------------------------------------------------------*/
void CAN_setup (void)  {
  unsigned int brp = stm32_GetPCLK1();

  RCC->APB1ENR |= RCC_APB1ENR_CANEN;              // enable clock for CAN

  // Note: uses PB8 and PB9 for CAN
  // enable clock for Alternate Function
  //启用复用功能的时钟
  RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
  // reset CAN remap
  //复位CAN重新映射
  AFIO->MAPR   &= 0xFFFF9FFF;
  //   set CAN remap use PB8 PB9
  //设置CAN重新映射,使用PB8,PB9
  AFIO->MAPR   |= 0x00004000; 
// enable clock for GPIO B
//使能GPIOB使用的RCC时钟   
  RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
  // CAN RX pin PB.8 input push pull
  //PB.8推挽输入
  GPIOB->CRH &= ~(0x0F<<0);
  GPIOB->CRH |=  (0x08<<0);                        
  // CAN TX pin PB.9 alternate output push pull
  //PB.9复用推挽输出
  GPIOB->CRH &= ~(0x0F<<4);
  GPIOB->CRH |=  (0x0B<<4); 
  // enable interrupt
  //发送中断使能
  NVIC->ISER[0] |= (1 << (USB_HP_CAN_TX_IRQChannel  & 0x1F));
  // enable interrupt
  //接收中断使能
  NVIC->ISER[0] |= (1 << (USB_LP_CAN_RX0_IRQChannel & 0x1F));
  //初始化模式, 禁止报文自动重传
  CAN->MCR = (CAN_MCR_NART | CAN_MCR_INRQ);       // init mode disable auto. retransmission
  // Note: only FIFO 0 transmit mailbox 0 used
  // FIFO 0 msg pending Transmit mbx empty
  //FIFO0发生溢出的情况FIFO 0的FOVR位被置’1’时,产生中断。
  //发送邮箱0变为空,RQCPx位被置’1’时,产生中断。
  CAN->IER = (CAN_IER_FMPIE0 | CAN_IER_TMEIE);    

  /* Note: this calculations fit for PCLK1 = 36MHz */
  //设置波特率
  brp  = (brp / 18) / 500000;                     // baudrate is set to 500k bit/s
                                                                          
  /* set BTR register so that sample point is at about 72% bit time from bit start */
  /* TSEG1 = 12 TSEG2 = 5 SJW = 4 => 1 CAN bit = 18 TQ sample at 72%    */
  CAN->BTR &= ~(((        0x03) << 24) | ((        0x07) << 20) | ((       

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       1160  2008-09-23 09:20  BHS-STM32 实验29-CAN通讯(直接操作寄存器)\Abstract.txt

     文件       6517  2009-08-02 15:07  BHS-STM32 实验29-CAN通讯(直接操作寄存器)\BinType.h

     文件      11412  2017-11-27 20:48  BHS-STM32 实验29-CAN通讯(直接操作寄存器)\CAN.c

     文件       1892  2008-09-23 09:20  BHS-STM32 实验29-CAN通讯(直接操作寄存器)\CAN.h

     文件       2014  2011-06-10 13:34  BHS-STM32 实验29-CAN通讯(直接操作寄存器)\CAN.Opt

     文件       7604  2010-12-20 17:42  BHS-STM32 实验29-CAN通讯(直接操作寄存器)\CAN.Uv2

     文件      84212  2011-06-06 20:22  BHS-STM32 实验29-CAN通讯(直接操作寄存器)\CAN.uvopt

     文件      45879  2011-06-05 12:35  BHS-STM32 实验29-CAN通讯(直接操作寄存器)\CAN.uvproj

     文件       3652  2017-11-27 20:48  BHS-STM32 实验29-CAN通讯(直接操作寄存器)\CanDemo.c

     文件       5044  2008-09-23 09:20  BHS-STM32 实验29-CAN通讯(直接操作寄存器)\CAN_Simulate.ini

     文件       3349  2009-10-20 23:53  BHS-STM32 实验29-CAN通讯(直接操作寄存器)\config.h

     文件       6507  2009-10-02 02:48  BHS-STM32 实验29-CAN通讯(直接操作寄存器)\MyType.h

     文件        479  2011-01-31 20:48  BHS-STM32 实验29-CAN通讯(直接操作寄存器)\out\ObjRAM\CanDemo.sct

     文件         19  2011-01-31 20:52  BHS-STM32 实验29-CAN通讯(直接操作寄存器)\out\ObjRAM\ExtDll.iex

     文件        479  2011-06-10 13:34  BHS-STM32 实验29-CAN通讯(直接操作寄存器)\out\ObjSim\CanDemo.sct

     文件       1258  2009-10-18 21:22  BHS-STM32 实验29-CAN通讯(直接操作寄存器)\RAM.ini

     文件      11307  2008-09-23 09:20  BHS-STM32 实验29-CAN通讯(直接操作寄存器)\STM32F10x.s

     文件     308842  2010-12-21 08:53  BHS-STM32 实验29-CAN通讯(直接操作寄存器)\STM32_Init.c

     文件       1185  2009-01-23 16:51  BHS-STM32 实验29-CAN通讯(直接操作寄存器)\STM32_Init.h

     文件       8609  2009-01-23 16:51  BHS-STM32 实验29-CAN通讯(直接操作寄存器)\STM32_Reg.h

     文件        326  2011-02-10 20:55  BHS-STM32 实验29-CAN通讯(直接操作寄存器)\说明.txt

     目录          0  2016-07-07 18:38  BHS-STM32 实验29-CAN通讯(直接操作寄存器)\out\LstFlash

     目录          0  2016-07-07 18:38  BHS-STM32 实验29-CAN通讯(直接操作寄存器)\out\LstRAM

     目录          0  2016-07-07 18:38  BHS-STM32 实验29-CAN通讯(直接操作寄存器)\out\LstSim

     目录          0  2016-07-07 18:38  BHS-STM32 实验29-CAN通讯(直接操作寄存器)\out\ObjFlash

     目录          0  2017-11-27 20:47  BHS-STM32 实验29-CAN通讯(直接操作寄存器)\out\ObjRAM

     目录          0  2017-11-27 20:47  BHS-STM32 实验29-CAN通讯(直接操作寄存器)\out\ObjSim

     目录          0  2017-11-27 20:47  BHS-STM32 实验29-CAN通讯(直接操作寄存器)\out

     目录          0  2017-11-27 20:47  BHS-STM32 实验29-CAN通讯(直接操作寄存器)

----------- ---------  ---------- -----  ----

............此处省略2个文件信息

评论

共有 条评论