历史上的今天
返回首页

历史上的今天

今天是:2024年12月07日(星期六)

2020年12月07日 | STM32f103 —— can通信

2020-12-07 来源:elecfans

#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();

}


推荐阅读

史海拾趣

Hilscher Gesellschaft für Systemautomation mbH公司的发展小趣事

面对市场的多元化需求,HVPSI不断扩展其产品线,从最初的高压电源模块拓展到高压直流电源、高压脉冲电源等多个领域。公司还投入大量资源研发新型材料和技术,以提升产品的性能和可靠性。这些努力使得HVPSI能够提供全方位的高压电源解决方案,满足不同行业、不同应用场景的需求。

ALD [Advanced Linear Devices]公司的发展小趣事

面对市场的多元化需求,HVPSI不断扩展其产品线,从最初的高压电源模块拓展到高压直流电源、高压脉冲电源等多个领域。公司还投入大量资源研发新型材料和技术,以提升产品的性能和可靠性。这些努力使得HVPSI能够提供全方位的高压电源解决方案,满足不同行业、不同应用场景的需求。

风华邦科(FH-BK)公司的发展小趣事

为了进一步扩大业务范围和提升品牌影响力,FlyWin集团积极寻求与其他行业的跨界合作。例如,公司与某知名无人机制造商达成战略合作,共同开发基于无人机平台的智能监测系统。该系统利用无人机的高空视角和快速响应能力,实现了对特定区域的实时监控和数据分析。这一合作不仅为双方带来了新的业务增长点,也为公司在无人机领域的布局奠定了坚实基础。

CTC Coils Ltd公司的发展小趣事

在快速发展的过程中,CTC Coils Ltd公司始终注重企业文化建设和团队建设。公司倡导创新、务实、高效的企业精神,鼓励员工勇于创新、追求卓越。同时,公司还注重员工的培训和成长,为员工提供广阔的发展空间和良好的职业晋升通道。这些举措使得公司凝聚力不断增强,为公司的长远发展奠定了坚实的基础。

请注意,这些故事是虚构的,旨在展示一个电子行业公司可能经历的发展路径和关键阶段。实际情况可能因公司具体情况和市场环境的不同而有所差异。

對餘科技(DIOFIT)公司的发展小趣事

DIOFIT公司自创立之初,便面临着激烈的市场竞争和技术挑战。创始人团队凭借对电子技术的深入理解和热情,决心打造一家专注于高端电子产品研发和生产的企业。在资金紧张、人才匮乏的情况下,他们坚持自主研发,不断优化产品设计,最终成功推出了一款具有创新性的智能家居控制系统,赢得了市场的认可,为公司的发展奠定了坚实的基础。

南京中科微公司的发展小趣事

CSM深知在半导体领域,合作是实现共赢的关键。因此,公司积极与TSMC、UMC、SMIC等国内外领先的半导体芯片厂商建立合作关系,共同推进流片生产和技术研发。这种合作模式不仅提高了CSM的生产效率和产品质量,也促进了整个半导体产业链的发展。

问答坊 | AI 解惑

超声波模块+红外遥控资料

本帖最后由 paulhyde 于 2014-9-15 04:00 编辑 1超声波测距已通过实物测试 2专门针对SMK1838遥控接收头的红外遥控装置  …

查看全部问答>

刚才把开发板单片机的串口烧了,郁闷!

单片机(STC89C52)VCC是5V, GPS(MTK M89)VCC是4.3V RXD连TXD,TXD连RXD 用万用表量的时候GPS的串口是4.8V,GPS的是3.6V 不知道怎么的就烧了?为什么没接串口之前MCU的RXD、TXD都有4.8的电压? 小弟刚入门还请指点迷经,要怎么联才可以让MCU读到GPS ...…

查看全部问答>

Freescale的单片机RTI的一个问题

   实时中断定时0.625ms,难道是中断的时间太快了?怎么For里面的循环都没有执行了呢?    现在想明白的就是一个问题,在进入中断响应的处理过程中,定时器是不是还在定时?我感觉应该在退出响应之后才可以,要不然,如果响应 ...…

查看全部问答>

wince系统下 compact framework程序崩溃的求救

我的wince系统,已经按照过compact framwork 2.0 ,期间运行 dotnet 程序都很正常(程序比较经常读写文件)。大约持续运行1个月后,dotnet程序无法启动,报异常。而且我用任意一个dotnet程序都是出现这个异常。怀疑系统中产生了什么异常。具体不明 ...…

查看全部问答>

请问:什么叫上位机,下位机啊,它们是干什么用的啊?

什么叫上位机,下位机啊,它们是干什么用的啊?…

查看全部问答>

IR new ic Rugged AEC-Q100 Qualified 600V ICs

IR Introduces Family of Rugged AEC-Q100 Qualified 600V ICs for Energy-Efficient Automotive Gate Drive Applications International Rectifier has launched a family of rugged 600V ICs for energy-efficient automotive ga ...…

查看全部问答>

请教城主一个MCO的问题,你以前回复的帖子!

版主发表于 2010-8-24 17:44 | 只看该作者 回复 引用 评分 报告 返回版面 TOP   得分:0…

查看全部问答>

菜鸟求组用CCS设置PWM的问题

用16F690做一个PWM信号的项目,但是总是不出来PWM信号,程序如下 #include #use delay(clock = 12000000) #fuses HS,NOWDT,NOPROTECT,PUT,NOBROWNOUT,MCLR #use fixed_io(c_outputs = PIN_C4,PIN_C6, PIN_C7) void main(void) { setup_ ...…

查看全部问答>

AD620双级放大电路

本系统要采集的信号十分微弱,5~100uV,设计电路要放大40000倍。由于AD620放大倍数越大,误差就越大,故本电路用了两片AD620形成二级放大。其中U1放大100倍,U2放大10倍。图中IN1,IN2为经过差分放大后的信号,输入到U1。U1放大后形成一路信号输入到U ...…

查看全部问答>