初始化CAN模块
void INIT_CAN0(void)
{
if(CAN0CTL0_INITRQ==0) // 查询是否进入初始化状态
CAN0CTL0_INITRQ =1; // 进入初始化状态
while (CAN0CTL1_INITAK==0); //等待进入初始化状态
CAN0BTR0_SJW = 0; //设置同步
CAN0BTR0_BRP = 7; //设置波特率
CAN0BTR1 = 0x1c; //设置时段1和时段2的Tq个数 ,总线频率为250kb/s
// 关闭滤波器
CAN0IDMR0 = 0xFF;
CAN0IDMR1 = 0xFF;
CAN0IDMR2 = 0xFF;
CAN0IDMR3 = 0xFF;
CAN0IDMR4 = 0xFF;
CAN0IDMR5 = 0xFF;
CAN0IDMR6 = 0xFF;
CAN0IDMR7 = 0xFF;
CAN0CTL1 = 0xC0; //使能MSCAN模块,设置为一般运行模式、使用外部晶振,使用总线时钟源
CAN0CTL0 = 0x00; //返回一般模式运行
while(CAN0CTL1_INITAK); //等待回到一般运行模式
while(CAN0CTL0_SYNCH==0); //等待总线时钟同步
CAN0RIER_RXFIE = 1; //禁止接收中断
}
发送函数
Bool MSCAN0SendMsg(struct can_msg msg)
{
unsigned char send_buf, sp;
if(msg.len > 8) // 检查数据长度
return(FALSE);
if(CAN0CTL0_SYNCH==0) // 检查总线时钟
return(FALSE);
send_buf = 0;
do
{
CAN0TBSEL=CAN0TFLG; // 寻找空闲的缓冲器
send_buf=CAN0TBSEL;
}
while(!send_buf);
CAN0TXIDR0 = (unsigned char)(msg.id>>3);// 写入标识符
CAN0TXIDR1 = (unsigned char)(msg.id<<5);
if(msg.RTR)
CAN0TXIDR1 |= 0x10; // RTR = 阴性
for(sp = 0; sp < msg.len; sp++) // 写入数据
*((&CAN0TXDSR0)+sp) = msg.data[sp];
CAN0TXDLR = msg.len; // 写入数据长度
CAN0TXTBPR = msg.prty; // 写入优先级
CAN0TFLG = send_buf; // 清 TXx 标志 (缓冲器准备发送)
return(TRUE);
}
接收函数
Bool MSCAN0GetMsg(struct can_msg *msg)
{
unsigned char sp2;
if(!(CAN0RFLG_RXF)) // 检测接收标志
return(FALSE);
if(CAN0RXIDR1_IDE) // 检测 CAN协议报文模式 (一般/扩展) 标识符
// IDE = Recessive (Extended Mode)
return(FALSE);
msg->id = (unsigned int)(CAN0RXIDR0<<3) // 读标识符|
(unsigned char)(CAN0RXIDR1>>5);
if(CAN0RXIDR1&0x10)
msg->RTR = TRUE;
else
msg->RTR = FALSE;
msg->len = CAN0RXDLR; // 读取数据长度
for(sp2 = 0; sp2 < msg->len; sp2++)// 读取数据
msg->data[sp2] = *((&CAN0RXDSR0)+sp2);
CAN0RFLG = 0x01; // 清 RXF 标志位 (缓冲器准备接收)
return(TRUE);
}
上一篇:stm32的can总线理解及应用——程序对应stm32f103系列
下一篇:STM32之CAN系列经验总结
推荐阅读
史海拾趣
在电子行业竞争日益激烈的背景下,BB公司深知技术创新是企业发展的核心动力。因此,公司投入大量研发资金,积极引进和培养人才,不断推动技术创新。经过多年的努力,BB公司在模拟集成电路领域取得了多项重大突破,推出了一系列具有自主知识产权的创新产品。这些产品不仅提升了BB公司的市场竞争力,也为整个电子行业的发展做出了贡献。
D1 International Inc公司深知,持续的技术创新是企业发展的核心动力。因此,公司不断加大研发投入,积极引进和培养高素质的研发人才。通过不断的创新实践,D1 International Inc公司在多个领域取得了重要的技术突破,为公司的发展注入了新的活力。
随着技术的不断进步,Control Sciences Inc开始寻求更广阔的市场空间。公司积极参与国内外各大电子展会,展示其先进的产品和技术。同时,公司还加大了市场推广力度,与多个知名企业建立了战略合作关系。通过这些努力,Control Sciences Inc的产品逐渐走进了更多的企业和家庭,其品牌影响力也日益增强。
为了持续提升产品质量和客户满意度,硕颉科技于2005年通过了ISO9001质量管理体系认证。这一认证标志着公司在质量管理方面达到了国际标准,也进一步提升了公司的行业地位和竞争力。通过实施严格的质量管理体系,硕颉科技确保了产品从设计、研发到销售的每一个环节都符合高质量标准,为客户提供了可靠的产品和服务。
这些故事只是硕颉科技发展历程中的一部分,它们共同展示了公司在电子行业中不断壮大、创新发展的历程。未来,硕颉科技将继续秉承创新、质量、服务的理念,不断推出更多优质产品,拓展更广阔的市场空间,为电子行业的发展贡献更多力量。
在开拓重庆市场时,DURACELL公司面临了巨大的挑战。当地电池市场竞争激烈,价格参差不齐。然而,DURACELL公司凭借其独特的营销策略和高质量的产品,迅速打开了市场。他们选择了与当地贸易代理商合作的方式进入市场,并通过“三步走式”的营销策略迅速占领了市场份额。这一成功案例展示了DURACELL公司灵活的市场策略和对品质的坚持。
ATC公司的初创时期充满了挑战与艰辛。公司由几位电子工程领域的专家创立,他们凭借对技术的深刻理解和敏锐的市场洞察,决定投身于电子产品的研发与生产。在资金匮乏、市场竞争激烈的环境下,他们夜以继日地工作,不断试验、改进,最终成功研发出了一款具有竞争力的电子产品,为公司的发展奠定了坚实基础。
20点数字量、4点模拟量单片机控制器 JMDM-20DIO4AIO控制器说明书 特性: 一.8位高性能单片机作为主控制芯片,六倍于普通单片机的速度; 二.主电源采用9V交流电,也可以采用12V直流电; 三:12路光电隔离数字量输入,NPN输入型式,输 ...… 查看全部问答∨ |
|
欢迎满足以下条件之一的有识之士与我们联系,公司网址: www.nerc.com.cn,发送简历邮箱地址:whl668@epri.ac.cn。 1.具有2年以上电力行业嵌入式产品开发经验。 2. ...… 查看全部问答∨ |
|
高分求教i2c怎样写入EEPROM(内部寄存器地址大于254地址)? i2c怎样写入EEPROM(内部寄存器地址大于254地址)? 254的时候是8bit全1即FF的时候 请问255这个时候这地址应该怎样写入呢?我是先发送255的(1 0000 0000)“1”高字节位,等待一个响应,在发后面的“0000 0000”一个响应 这样发送对吗? 如 ...… 查看全部问答∨ |
|
我是计算机专业一名女学生,虽然已经大三了,可似乎对计算机还是一窍不通,不知道该怎么办..... 可我还是想从事计算机方面有技术性的工作(对于文员,平面设计之类又没什么兴趣)...... 我想从现在开始努力,可我不知道应该朝哪个方向开哪那个 ...… 查看全部问答∨ |
我安装了activeSync 4.5,然后是evc4、sp4和ppc 2003 模拟器,activesync无论如何都发现不了模拟器程序。我在网上看到的说安装activesync之后还要安装一个connect activesync with emulator的工具,我安装了,但是里面那个EmuAS.exe运行不起来,说 ...… 查看全部问答∨ |
// 定义指示灯寄存器地址和寄存器类型 // 子程序接口 //void Delay(unsigned int nDelay); // 延时子程序 //#include \\"Delay.c\\" //#include \\"DPPL_init.c\\" //#include \\"sdram_init.c\\" ...… 查看全部问答∨ |