OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7088|回复: 3

STM32F107两个can口通信,CAN没有波形

[复制链接]

6

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2014-10-28
在线时间
0 小时
发表于 2014-10-29 20:37:14 | 显示全部楼层 |阅读模式
5金钱
我在stm32f107板子上,把两个can口连接起来,然后一开始直接用的裸跑不加ucos,可以正常的运行;
然后加上了ucos之后,同样的配置程序,结果发现没法进入can接收中断函数,但是其他的中断函数,比如串口中断都正常;
后来用示波器测了下,can1的两个管脚就没有波形; 但是can的配置函数和之前裸跑的一模一样的,区别在于之前裸跑的库是3.3,现在是3.5;下面的是我的和can有关的配置函数
can配置函数(1)
[mw_shl_code=c,true] RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOB, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1 | RCC_APB1Periph_CAN2, ENABLE); /* CAN register init */ CAN_DeInit(CAN1); CAN_DeInit(CAN2); CAN_StructInit(&CAN_InitStructure); //CAN1 cell init CAN_InitStructure.CAN_TTCM = DISABLE; CAN_InitStructure.CAN_ABOM = DISABLE; CAN_InitStructure.CAN_AWUM = DISABLE; CAN_InitStructure.CAN_NART = DISABLE; CAN_InitStructure.CAN_RFLM = DISABLE; CAN_InitStructure.CAN_TXFP = DISABLE; CAN_InitStructure.CAN_Mode = CAN_Mode_Normal; CAN_InitStructure.CAN_SJW = CAN_SJW_1tq; CAN_InitStructure.CAN_BS1 = CAN_BS1_3tq; CAN_InitStructure.CAN_BS2 = CAN_BS2_5tq; CAN_InitStructure.CAN_Prescaler = 4; CAN_Init(CAN1, &CAN_InitStructure); CAN_Init(CAN2, &CAN_InitStructure); //* CAN1 filter init 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 = 0; CAN_FilterInitStructure.CAN_FilterActivation = ENABLE; CAN_FilterInit(&CAN_FilterInitStructure); //* CAN2 filter init CAN_FilterInitStructure.CAN_FilterNumber = 14; CAN_FilterInit(&CAN_FilterInitStructure);[/mw_shl_code]

CAN IO口的配置
[mw_shl_code=c,true]GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOA ,ENABLE); /* Configure CAN1 RX pin */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOD, &GPIO_InitStructure); /* Configure CAN2 RX pin */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_Init(GPIOB, &GPIO_InitStructure); /* Configure CAN1 TX pin */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIO_InitStructure); /* Configure CAN2 TX pin */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_Init(GPIOB, &GPIO_InitStructure); /* Remap CAN1 and CAN2 GPIOs */ GPIO_PinRemapConfig(GPIO_Remap2_CAN1 , ENABLE); GPIO_PinRemapConfig(GPIO_Remap_CAN2, ENABLE);[/mw_shl_code]
NVIC的配置
[mw_shl_code=c,true]NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); /* Configure the NVIC Preemption Priority Bits */ NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01 ; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; // NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); // NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01 ; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; // NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = CAN2_RX0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01 ; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; // NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); [/mw_shl_code]

其他配置
[mw_shl_code=c,true] CAN_Config(); CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE); CAN_ITConfig(CAN2, CAN_IT_FMP0, ENABLE);[/mw_shl_code]

在发送的时候,我是在APP.C声明了一个CanTxMsg TxMessage的全局变量,然后在一个任务里面每隔3ms就循环发送
[mw_shl_code=c,true]while(1) { TxMessage.Data[0] = 0x55; CAN_Transmit(CAN1, &TxMessage); OSTimeDlyHMSM(0,0,0,3); TxMessage.Data[0] = 0xAA; CAN_Transmit(CAN2, &TxMessage); OSTimeDlyHMSM(0,0,0,3); printf("Can Task"); }[/mw_shl_code]

“Can Task”可以不停的打印出来,但是Can1口和Can2口没有波形,也进不去中断

各位帮忙给看下,可能是什么地方出的问题,谢谢!!

各位,这个我前前后后查了真的两天了,实在是找不到什么地方出错了,附近里面是工程。希望有人能下下来帮我看下,非常的感谢!
(这个工程就俩TASK,一个是点亮led,一个是循环CAN发送)

Stm32-ucosII-demo.7z

572.87 KB, 下载次数: 505

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-10-29 23:23:51 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

6

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2014-10-28
在线时间
0 小时
 楼主| 发表于 2014-10-30 18:20:10 | 显示全部楼层
各位帮我看看吧,我前前后后查了两天了,实在看不出什么地方有问题了
工程附件我已经传上去了,希望有人可以帮忙给看一下,非常感谢!!
回复

使用道具 举报

27

主题

427

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
4370
金钱
4370
注册时间
2017-5-30
在线时间
579 小时
发表于 2018-7-3 15:07:00 | 显示全部楼层
pengpotter 发表于 2014-10-30 18:20
各位帮我看看吧,我前前后后查了两天了,实在看不出什么地方有问题了
工程附件我已经传上去了,希望有人可 ...

楼主解决了吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 05:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表