STM32f103 —— can通信
来源:互联网 发布:超星阅读器windows 编辑:程序博客网 时间:2024/05/17 08:41
#include "stm32f10x_can.h"CanRxMsg CanPeliRxMsgStructure;CanTxMsg CanPeliTxMsgStructure;static void can_nvic_config(void){ NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);}static void can_gpio_config(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); GPIO_PinRemapConfig(GPIO_Remap1_CAN1, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //can rx pb8 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //can tx pb9 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOB, &GPIO_InitStructure);}void CANConfig(void){ CAN_InitTypeDef CAN_InitStructure; CAN_FilterInitTypeDef CAN_FilterInitStructure; can_nvic_config(); can_gpio_config(); CAN_DeInit(CAN1); CAN_StructInit(&CAN_InitStructure); // 波特率 = Fpclk1/((tbs1+1+tbs2+1+1)*brp); // 125K = 36000K / 16 * (8 + 9 + 1); CAN_InitStructure.CAN_TTCM = DISABLE; // 非时间触发 CAN_InitStructure.CAN_ABOM = DISABLE; // 软件自动离线管理 CAN_InitStructure.CAN_AWUM = DISABLE; // 睡眠模式通过软件唤醒(清楚CAN->MCR的sleep位) CAN_InitStructure.CAN_NART = DISABLE; // 禁止报文自动传送 CAN_InitStructure.CAN_RFLM = DISABLE; // 报文不锁定,新的覆盖旧的 CAN_InitStructure.CAN_TXFP = DISABLE; // 优先级由报文标识符决定 CAN_InitStructure.CAN_Mode = CAN_Mode_Normal; // 模式设置 0:普通模式, 1:换回模式 CAN_InitStructure.CAN_SJW = CAN_SJW_1tq; // 重新同步跳跃宽度 CAN_InitStructure.CAN_BS1 = CAN_BS1_9tq; // 时间段1的时间单元 CAN_InitStructure.CAN_BS2 = CAN_BS2_8tq; // 时间段2的时间单元 CAN_InitStructure.CAN_Prescaler = 16; // 分频系数 CAN_Init(CAN1, &CAN_InitStructure); CAN_FilterInitStructure.CAN_FilterNumber = 0; CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask; CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit; CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000; CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000; CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000; CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000; CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_Filter_FIFO0; CAN_FilterInitStructure.CAN_FilterActivation = ENABLE; CAN_FilterInit(&CAN_FilterInitStructure); CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);}void CANRecvMsg(void){ CAN_Receive(CAN1, CAN_FIFO0, &CanPeliRxMsgStructure);}void CANSendMsg(can_msg_t *buffer){ CAN_Transmit(CAN1, &CanPeliTxMsgStructure); for (i = 0; i < 7000; i++);}void USB_LP_CAN1_RX0_IRQHandler(void){// CAN_ClearITPendingBit(CAN1, CAN_IT_FMP0); // 清除中断 CANRecvMsg();}
0 0
- STM32f103 —— can通信
- STM32F103 CAN总线配置与通信小记
- STM32F103的CAN 通信之通讯协议
- STM32F103学习笔记——串口通信
- 【ST学习小组】STM32F103的CAN 通信之主控器
- STM32f103——ILI9341
- STM32f103 —— timer
- stm32f103 c8t6 can
- 【ST学习小组】STM32F103的CAN 通信之从控器部分
- DSP学习总结——CAN通信
- STM32——CAN总线通信
- STM32F3—CAN通信自发自收
- stm32f103学习笔记——NVIC初始化
- STM32F103学习笔记——仿真波形
- STM32F103学习笔记——SysTick
- STM32F103学习笔记——外部中断
- STM32f103 —— 内部flash读写
- STM32f103 can的两个接收fifo使用方法
- iOS开发中的关键字const/static/extern
- Android如何让APP进程常驻内存?
- Android开源项目-Easypermissions
- Shell中, 为标准错误输出添加时间戳
- 父子容器
- STM32f103 —— can通信
- java:poi读写2003版excel
- struts2 java.lang.IllegalStateException: getWriter() has already been called for this response(异常解决)
- Java HashMap嵌套List实现对多目标进行列表分类
- C. Anton and Fairy Tale----思维+二分答案
- Servlet多线程单实例
- 《图解HTTP》读书笔记
- spring学习之路1
- ConcurrentHashMap