资源简介
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个文件信息
相关资源
- stm32f407上的两个can发送和接收例程
- STM32 led 时钟
- STM32 2.4G通信例程
- 直流无刷电机方波驱动 stm32 例程代码
- STM32中文资料
- STM32蓝牙和串口程序
- STM32f103超声波模块例程
- stm32f103c8t6 4 oled.rar
- stm32f030 IAP Demo(原创)
- STM32基于rt_thread操作系统的SDHC卡文件
- NRF24L01实现51与STM32双向通讯
- STM32F103 串口程序(完整版)
- stm32 ds18b20 温度传感器 测试通过
- stm32官方例程
- STM32F103定时器中断程序
- [免费]基于stm32f103ze 的OLED驱动代码
- STM32F103RBT6驱动UC1698控制芯片的160160黑
- STM32F103 DS18B20 V3.5.0固件库驱动程序工
- STM32定时器使用入门。看了这个程序会
- SIM908 SDIO FSMC STM32 FIFO
- STM32F103 CC2500完整驱动(模拟SPI)
- AD7606采集程序
- stm32 用SPI 方式读写 SDHC
- stm32通过DMA方式采集ADC数据
- 意法半导体STM全系列微控制器STM32ST
- 基于STM32芯片的SX1278 驱动 LORA.rar
- STM32的PCB封装库,以及原理图库,48
- SX1280.rar
- STM32 DS3231驱动.zip
- STM32F103C8T6+NRF24l01无线通信
评论
共有 条评论