OpenEdv-开源电子网

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

stm32f103 can总线回环测试可用,分析仪有数据,正常模式没有数据

[复制链接]

2

主题

17

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2017-11-23
在线时间
7 小时
发表于 2017-11-23 17:30:59 | 显示全部楼层 |阅读模式
10金钱
各位大佬好,这几天一直在调stm32的can通讯,好几天了都没做出来~~~~~~~,来这里求救了!!!!!!!我使用的是stm32f103rct6单片机,使用的程序模板是原子哥ALIENTEK 战舰 STM32F103 开发板can实验教程,使用的can收发器是ISO1050,手里有一个个usb/can转换器。现在单片机canRX,TX接到IS01050,1050出来的CANH、CANL接到转换器的CANH\CANL,没有接反。
设置成回环测试的时候,电脑通过转化器可以收到单片机发出的数据,数据也没有错误。设置成正常模式,单片机就发不出数据了。
PCB板上加了两个led,用来指示单片机引脚的canRX、TX引脚。正常模式的时候这两个灯没有回环测试的时候亮,基本上亮不起来了,而且正常模式的时候闪十几下就不亮了。

下面是配置程序:
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, ENABLE);//ê1ÄüPORTAê±Öó                                                                                                                    

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);//ê1ÄüCAN1ê±Öó       

        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);                        //3õê¼»ˉIO

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;        //éÏà-êäèë
        GPIO_Init(GPIOA, &GPIO_InitStructure);                        //3õê¼»ˉIO

        //CANμ¥ÔaéèÖÃ
        CAN_InitStructure.CAN_TTCM=DISABLE;                        //·Çê±¼ä′¥·¢í¨DÅģ꽠 
        CAN_InitStructure.CAN_ABOM=DISABLE;                        //èí¼t×Ô¶ˉàëÏß1üàí         
        CAN_InitStructure.CAN_AWUM=DISABLE;                        //ËˉÃßÄ£ê½í¨1yèí¼t»½DÑ(Çå3yCAN->MCRμÄSLEEPλ)
        CAN_InitStructure.CAN_NART=ENABLE;                        //½ûÖ1±¨ÎÄ×Ô¶ˉ′«Ëí
        CAN_InitStructure.CAN_RFLM=DISABLE;                         //±¨ÎÄ2»Ëø¶¨,DÂμĸ2¸Ç¾éμÄ  
        CAN_InitStructure.CAN_TXFP=DISABLE;                        //óÅÏè¼¶ó鱨Îıêê¶·û¾ö¶¨
        CAN_InitStructure.CAN_Mode= mode;                //Ä£ê½éèÖão mode:0,ÆÕí¨Ä£ê½;1,»Ø»·Ä£ê½;
        //éèÖÃ2¨ìØÂê
        CAN_InitStructure.CAN_SJW=tsjw;                                //ÖØDÂí¬2½ìøÔ¾¿í¶è(Tsjw)Îatsjw+1¸öê±¼äμ¥λ  CAN_SJW_1tq         CAN_SJW_2tq CAN_SJW_3tq CAN_SJW_4tq
        CAN_InitStructure.CAN_BS1=tbs1;                         //Tbs1=tbs1+1¸öê±¼äμ¥λCAN_BS1_1tq ~CAN_BS1_16tq
        CAN_InitStructure.CAN_BS2=tbs2;                                //Tbs2=tbs2+1¸öê±¼äμ¥λCAN_BS2_1tq ~        CAN_BS2_8tq
        CAN_InitStructure.CAN_Prescaler=brp;        //·ÖÆμÏμêy(Fdiv)Îabrp+1       
        CAN_Init(CAN1, &CAN_InitStructure);                //3õê¼»ˉCAN1

        CAN_FilterInitStructure.CAN_FilterNumber=0;        //1yÂËÆ÷0
        CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;         //Æá±ÎλÄ£ê½
        CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;         //32λ¿í
        CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;        //32λID
        CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
        CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;//32λMASK
        CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
        CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//1yÂËÆ÷01Øáaμ½FIFO0
        CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;//¼¤»î1yÂËÆ÷0

        CAN_FilterInit(&CAN_FilterInitStructure);                        //ÂË2¨Æ÷3õê¼»ˉ
       

        return 0;
}   


//can·¢Ëíò»×éêy¾Y(1춨¸ñê½:IDÎa0X12,±ê×¼Ö¡,êy¾YÖ¡)       
//len:êy¾Y3¤¶è(×î′óÎa8)                                     
//msg:êy¾YÖ¸Õë,×î′óÎa8¸ö×Ö½ú.
//·μ»ØÖμ:0,3é1|;
//                 ÆäËû,ê§°ü;
u8 Can_Send_Msg(u8* msg,u8 len)
{       
        u8 mbox;
        u16 i=0;
        CanTxMsg TxMessage;
        TxMessage.StdId=0x12;                        // ±ê×¼±êê¶·û
        TxMessage.ExtId=0x12;                        // éèÖÃà©Õ1±êê¾·û
        TxMessage.IDE=CAN_Id_Standard;         // ±ê×¼Ö¡
        TxMessage.RTR=CAN_RTR_Data;                // êy¾YÖ¡
        TxMessage.DLC=len;                                // òa·¢ËíμÄêy¾Y3¤¶è
        for(i=0;i<len;i++)
        TxMessage.Data[i]=msg[i];                                  
        mbox= CAN_Transmit(CAN1, &TxMessage);   
        i=0;
        while((CAN_TransmitStatus(CAN1, mbox)==CAN_TxStatus_Failed)&&(i<0XFFF))i++;        //μè′y·¢&#203;í&#189;áê&#248;
        if(i>=0XFFF)return 1;
        return 0;         
}
//can&#191;ú&#189;óê&#213;êy&#190;Y2é&#209;ˉ
//buf:êy&#190;Y&#187;o′&#230;&#199;&#248;;         
//·μ&#187;&#216;&#214;μ:0,&#206;Têy&#190;Y±&#187;ê&#213;μ&#189;;
//                 &#198;&#228;&#203;&#251;,&#189;óê&#213;μ&#196;êy&#190;Y3¤&#182;è;
u8 Can_Receive_Msg(u8 *buf)
{                                     
        u32 i;
        CanRxMsg RxMessage;
    if( CAN_MessagePending(CAN1,CAN_FIFO0)==0)return 0;                //&#195;&#187;óD&#189;óê&#213;μ&#189;êy&#190;Y,&#214;±&#189;óí&#203;3&#246;
    CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);//&#182;áè&#161;êy&#190;Y       
    for(i=0;i<8;i++)
    buf[i]=RxMessage.Data[i];  
        return RxMessage.DLC;       
}


下面是主程序:
#include "led.h"
#include "delay.h"
//#include "key.h"
#include "sys.h"
//#include "lcd.h"
//#include "usart.h"         
#include "can.h"
int main(void)
{         
                u8 key;
        u8 i=0,t=0;
        u8 cnt=0;
        u8 canbuf[8];
        u8 res;
        u8 mode=CAN_Mode_LoopBack;//CAN1¤×÷&#196;£ê&#189;;CAN_Mode_Normal(0)£o&#198;&#213;í¨&#196;£ê&#189;£&#172;CAN_Mode_LoopBack(1)£o&#187;·&#187;&#216;&#196;£ê&#189;

        delay_init();                     //&#209;óê±oˉêy3&#245;ê&#188;&#187;ˉ          
        //NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//éè&#214;&#195;&#214;D&#182;&#207;ó&#197;&#207;è&#188;&#182;·&#214;×é&#206;a×é2£o2&#206;&#187;&#199;à&#213;&#188;ó&#197;&#207;è&#188;&#182;£&#172;2&#206;&#187;&#207;ìó|ó&#197;&#207;è&#188;&#182;
        //uart_init(115200);                 //′&#174;&#191;ú3&#245;ê&#188;&#187;ˉ&#206;a115200
       

        CAN_Mode_Init(CAN_SJW_1tq,CAN_BS2_8tq,CAN_BS1_9tq,20,CAN_Mode_Normal);//CAN3&#245;ê&#188;&#187;ˉ&#187;·&#187;&#216;&#196;£ê&#189;,2¨ì&#216;&#194;ê100Kbps    CAN_Mode_LoopBack   CAN_Mode_Normal

        while(1)
        {


                   for(i=0;i<8;i++)
                        {
                                canbuf[i]=cnt+i;//ì&#238;3&#228;·¢&#203;í&#187;o3&#229;&#199;&#248;
                        }
                        res=Can_Send_Msg(canbuf,8);//·¢&#203;í8&#184;&#246;×&#214;&#189;ú
                        delay_ms(1500);


                }                  
               
}



canRX/TX指示灯

canRX/TX指示灯

最佳答案

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

注释全是乱码,没法看? 收发引脚串电阻再并电容,取值的时候计算过没有? 电阻电容要不要再大点? 这是希望方波变圆滑一点吗? 板子是买的还是自己画的?是参考的哪个板子?参考是否一致?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

1044

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3722
金钱
3722
注册时间
2011-5-23
在线时间
2013 小时
发表于 2017-11-23 17:31:00 | 显示全部楼层
本帖最后由 aozima 于 2017-11-24 00:16 编辑

注释全是乱码,没法看?

收发引脚串电阻再并电容,取值的时候计算过没有? 电阻电容要不要再大点?
这是希望方波变圆滑一点吗?

板子是买的还是自己画的?是参考的哪个板子?参考是否一致?
RT-Thread RTOS 音频,WIFI,蓝牙
回复

使用道具 举报

2

主题

17

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2017-11-23
在线时间
7 小时
 楼主| 发表于 2017-11-23 17:31:36 | 显示全部楼层
自顶一下
回复

使用道具 举报

2

主题

17

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2017-11-23
在线时间
7 小时
 楼主| 发表于 2017-11-23 17:34:16 | 显示全部楼层
补充一个ISO1050的图
捕获1.PNG
回复

使用道具 举报

2

主题

17

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2017-11-23
在线时间
7 小时
 楼主| 发表于 2017-11-23 17:35:37 | 显示全部楼层
ISO1050

ISO1050

ISO1050
回复

使用道具 举报

2

主题

17

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2017-11-23
在线时间
7 小时
 楼主| 发表于 2017-11-23 17:59:07 | 显示全部楼层
不要沉了呀
回复

使用道具 举报

2

主题

17

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2017-11-23
在线时间
7 小时
 楼主| 发表于 2017-11-23 21:55:13 | 显示全部楼层
没人关注########
回复

使用道具 举报

2

主题

17

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2017-11-23
在线时间
7 小时
 楼主| 发表于 2017-11-24 10:55:47 | 显示全部楼层
aozima 发表于 2017-11-23 23:47
注释全是乱码,没法看?

收发引脚串电阻再并电容,取值的时候计算过没有? 电阻电容要不要再大点?

太谢谢了,我刚才把电容去掉,正常模式就马上了已发出数据了,我现在调接收数据
回复

使用道具 举报

35

主题

309

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2641
金钱
2641
注册时间
2016-8-10
在线时间
470 小时
发表于 2017-11-24 11:02:25 | 显示全部楼层
电阻对不
回复

使用道具 举报

2

主题

17

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2017-11-23
在线时间
7 小时
 楼主| 发表于 2017-11-24 13:03:15 | 显示全部楼层

我对硬件方面不懂呀,电阻怎么算呀
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2019-7-19
在线时间
0 小时
发表于 2019-7-19 11:03:11 | 显示全部楼层
您好,我现在也在调试这个问题,动不了,能否指教一下,或者分享下你的这个调试代码
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2019-7-12
在线时间
4 小时
发表于 2019-8-13 22:16:58 | 显示全部楼层
是啊,我现在用的买来的Demo板,环回模式能看到波形,正常模式就不行了,哪里问题?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 00:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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