OpenEdv-开源电子网

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

单片机can口管脚测不到高低电平变换,有什么可能的原因?

[复制链接]

4

主题

63

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1194
金钱
1194
注册时间
2017-8-31
在线时间
295 小时
发表于 2017-9-5 11:16:57 | 显示全部楼层 |阅读模式
1金钱
用的原子哥的can通信程序改造的程序,去掉LCD和key部分,在103zet6学习板上可以检测到PA12 cantx有电平变换;
但同样的程序换到公司的103rct6产品板上,示波器看PA11和PA12都是高电平,没有电平变换,就相当于没有数据发送出来;
自测环回模式没问题,直接当GPIO用输出高低电平也没问题,但一配置完CAN口就出问题了,有什么可能的原因?
can配置程序,基本没怎么改:
u8 CAN_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode)
{
        GPIO_InitTypeDef                 GPIO_InitStructure;
        CAN_InitTypeDef                CAN_InitStructure;
        CAN_FilterInitTypeDef          CAN_FilterInitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);                                                                                                        

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;       
        GPIO_Init(GPIOA, &GPIO_InitStructure);       

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;       
        GPIO_Init(GPIOA, &GPIO_InitStructure);       
       //GPIO_PinRemapConfig(GPIO_Remap1_CAN1, ENABLE);               

        CAN_InitStructure.CAN_TTCM=DISABLE;                       
        CAN_InitStructure.CAN_ABOM=DISABLE;                       
        CAN_InitStructure.CAN_AWUM=DISABLE;                       
        CAN_InitStructure.CAN_NART=ENABLE;                       
        CAN_InitStructure.CAN_RFLM=DISABLE;                        
        CAN_InitStructure.CAN_TXFP=DISABLE;                       
        CAN_InitStructure.CAN_Mode= mode;                

        CAN_InitStructure.CAN_SJW=tsjw;                               
        CAN_InitStructure.CAN_BS1=tbs1;                        
        CAN_InitStructure.CAN_BS2=tbs2;                               
        CAN_InitStructure.CAN_Prescaler=brp;        
        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);                       
       
        return 0;
}

最佳答案

查看完整内容[请看2#楼]

样板再接一块TJA1050,学习板和样板两块板子CAN通信环境搭建完全后就好了,要确保引出的脚与TJA1050连接正确,最后才成功通信。 我以为can口能像usart口那样直接测GPIO能测出发送数据波形,因为不知道为什么学习板自带的TJA1050没与另外的CAN收发器也能出来波形,误导了我。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

63

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1194
金钱
1194
注册时间
2017-8-31
在线时间
295 小时
 楼主| 发表于 2017-9-5 11:16:58 | 显示全部楼层
样板再接一块TJA1050,学习板和样板两块板子CAN通信环境搭建完全后就好了,要确保引出的脚与TJA1050连接正确,最后才成功通信。
我以为can口能像usart口那样直接测GPIO能测出发送数据波形,因为不知道为什么学习板自带的TJA1050没与另外的CAN收发器也能出来波形,误导了我。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-14 21:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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