OpenEdv-开源电子网

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

CAN-USB分析仪设置问题 CAN总线波特率和串口波特率要一致吗

[复制链接]

3

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2016-5-22
在线时间
28 小时
发表于 2016-8-1 22:36:45 | 显示全部楼层 |阅读模式
1金钱
  用原子哥的程序   这样设置上位机接收不到数据啊
#include "stm32f10x.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"         
#include "can.h"


/************************************************
ALIENTEKÕ½½¢STM32¿a·¢°åêμÑé26
CANí¨DÅêμÑé
¼¼êõÖ§3Ö£owww.openedv.com
ìÔ±|μêÆì£ohttp://eboard.taobao.com
1Ø×¢Î¢DÅ1«Öúƽì¨Î¢DÅoÅ£o"ÕyμãÔ-×ó"£¬Ãa·Ñ»ñè¡STM32×êáÏ¡£
1ãÖYêDDÇòíμç×ó¿Æ¼¼óDÏT1«Ë¾  
×÷ÕߣoÕyμãÔ-×ó @ALIENTEK
************************************************/


int main(void)
{         
        u8 i=0;
        u8 cnt=0;
        u8 canbuf[8];
        u8 canbuf1[8];
        u8 res,key;
        u8 mode=CAN_Mode_LoopBack;//CAN1¤×÷Ä£ê½;CAN_Mode_Normal(0)£oÆÕí¨Ä£ê½£¬CAN_Mode_LoopBack(1)£o»·»ØÄ£ê½

        delay_init();                     //Ñóê±oˉêy3õê¼»ˉ          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//éèÖÃÖD¶ÏóÅÏè¼¶·Ö×éÎa×é2£o2λÇàÕ¼óÅÏè¼¶£¬2λÏìó|óÅÏè¼¶
        uart_init(115200);                 //′®¿ú3õê¼»ˉÎa115200
       
        CAN_Mode_Init(CAN_SJW_1tq,CAN_BS2_8tq,CAN_BS1_9tq,4,CAN_Mode_Normal);//CAN3õê¼»ˉ»·»ØÄ£ê½,2¨ìØÂê500Kbps   
       
        while(1)
        {
               
                        for(i=0;i<8;i++)
                        {
                                canbuf=cnt+i;//ì&#238;3&#228;·¢&#203;í&#187;o3&#229;&#199;&#248;
                               
                        }
                res=Can_Send_Msg(canbuf,8);//·¢&#203;í8&#184;&#246;×&#214;&#189;ú
                        if(res)               
                        printf("send failed\r\n");
                        else
                                printf("OK\r\n");
//ìáê&#190;·¢&#203;í3é1|                                                                  
                key=Can_Receive_Msg(canbuf1);
                if(key)//&#189;óê&#213;μ&#189;óDêy&#190;Y
                {                       
               
                        for(i=0;i<key;i++)
                        {                                                                            
                                printf("canbuf1[%d]=%d\r\n",i,canbuf1);
                        }
                }
                delay_ms(100);
        }                  
}

//CAN源文件
#include "can.h"
#include "led.h"
#include "delay.h"
#include "usart.h"
//////////////////////////////////////////////////////////////////////////////////         
//±&#190;3ìDò&#214;&#187;1&#169;&#209;§&#207;°ê1ó&#195;£&#172;&#206;′&#190;-×÷&#213;&#223;Dí&#191;é£&#172;2&#187;μ&#195;ó&#195;óú&#198;&#228;&#203;üè&#206;o&#206;ó&#195;í&#190;
//ALIENTEK&#213;&#189;&#189;¢STM32&#191;a·¢°&#229;
//CAN&#199;y&#182;ˉ ′ú&#194;&#235;          
//&#213;yμ&#227;&#212;-×ó@ALIENTEK
//&#188;&#188;ê&#245;&#194;&#219;ì3:www.openedv.com
//′′&#189;¨è&#213;&#198;ú:2014/5/7
//°&#230;±&#190;£oV1.1
//°&#230;è¨&#203;ùóD£&#172;μá°&#230;±&#216;&#190;&#191;&#161;£
//Copyright(C) 1&#227;&#214;YêDD&#199;òíμ&#231;×ó&#191;&#198;&#188;&#188;óD&#207;T1&#171;&#203;&#190; 2014-2024
//All rights reserved       
//********************************************************************************
//V1.1DT&#184;&#196;&#203;μ&#195;÷ 20150528
//DT&#213;yá&#203;CAN3&#245;ê&#188;&#187;ˉoˉêyμ&#196;&#207;à1&#216;×¢êí£&#172;&#184;ü&#213;yá&#203;2¨ì&#216;&#194;ê&#188;&#198;&#203;&#227;1&#171;ê&#189;
//////////////////////////////////////////////////////////////////////////////////          

//CAN3&#245;ê&#188;&#187;ˉ
//tsjw:&#214;&#216;D&#194;í&#172;2&#189;ì&#248;&#212;&#190;ê±&#188;&#228;μ¥&#212;a.·&#182;&#206;§:CAN_SJW_1tq~ CAN_SJW_4tq
//tbs2:ê±&#188;&#228;&#182;&#206;2μ&#196;ê±&#188;&#228;μ¥&#212;a.   ·&#182;&#206;§:CAN_BS2_1tq~CAN_BS2_8tq;
//tbs1:ê±&#188;&#228;&#182;&#206;1μ&#196;ê±&#188;&#228;μ¥&#212;a.   ·&#182;&#206;§:CAN_BS1_1tq ~CAN_BS1_16tq
//brp :2¨ì&#216;&#194;ê·&#214;&#198;μ&#198;÷.·&#182;&#206;§:1~1024;  tq=(brp)*tpclk1
//2¨ì&#216;&#194;ê=Fpclk1/((tbs1+1+tbs2+1+1)*brp);
//mode:CAN_Mode_Normal,&#198;&#213;í¨&#196;£ê&#189;;CAN_Mode_LoopBack,&#187;&#216;&#187;·&#196;£ê&#189;;
//Fpclk1μ&#196;ê±&#214;ó&#212;ú3&#245;ê&#188;&#187;ˉμ&#196;ê±oòéè&#214;&#195;&#206;a36M,è&#231;1&#251;éè&#214;&#195;CAN_Mode_Init(CAN_SJW_1tq,CAN_BS2_8tq,CAN_BS1_9tq,4,CAN_Mode_LoopBack);
//&#212;ò2¨ì&#216;&#194;ê&#206;a:36M/((8+9+1)*4)=500Kbps
//·μ&#187;&#216;&#214;μ:0,3&#245;ê&#188;&#187;ˉOK;
//    &#198;&#228;&#203;&#251;,3&#245;ê&#188;&#187;ˉê§°ü;
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;
#if CAN_RX0_INT_ENABLE
        NVIC_InitTypeDef                  NVIC_InitStructure;
#endif

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//ê1&#196;üPORTAê±&#214;ó                                                                                                                    

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);//ê1&#196;üCAN1ê±&#214;ó       

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //&#184;′ó&#195;í&#198;íì
        GPIO_Init(GPIOA, &GPIO_InitStructure);                        //3&#245;ê&#188;&#187;ˉIO

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;        //é&#207;à-ê&#228;è&#235;
        GPIO_Init(GPIOA, &GPIO_InitStructure);                        //3&#245;ê&#188;&#187;ˉIO

        //CANμ¥&#212;aéè&#214;&#195;
        CAN_InitStructure.CAN_TTCM=DISABLE;                        //·&#199;ê±&#188;&#228;′¥·¢í¨D&#197;&#196;£ê&#189;  
        CAN_InitStructure.CAN_ABOM=DISABLE;                        //èí&#188;t×&#212;&#182;ˉà&#235;&#207;&#223;1üàí         
        CAN_InitStructure.CAN_AWUM=DISABLE;                        //&#203;ˉ&#195;&#223;&#196;£ê&#189;í¨1yèí&#188;t&#187;&#189;D&#209;(&#199;&#229;3yCAN->MCRμ&#196;SLEEP&#206;&#187;)
        CAN_InitStructure.CAN_NART=ENABLE;                        //&#189;&#251;&#214;1±¨&#206;&#196;×&#212;&#182;ˉ′&#171;&#203;í
        CAN_InitStructure.CAN_RFLM=DISABLE;                         //±¨&#206;&#196;2&#187;&#203;&#248;&#182;¨,D&#194;μ&#196;&#184;2&#184;&#199;&#190;éμ&#196;  
        CAN_InitStructure.CAN_TXFP=DISABLE;                        //ó&#197;&#207;è&#188;&#182;ó鱨&#206;&#196;±êê&#182;·&#251;&#190;&#246;&#182;¨
        CAN_InitStructure.CAN_Mode= mode;                //&#196;£ê&#189;éè&#214;&#195;£o mode:0,&#198;&#213;í¨&#196;£ê&#189;;1,&#187;&#216;&#187;·&#196;£ê&#189;;
        //éè&#214;&#195;2¨ì&#216;&#194;ê
        CAN_InitStructure.CAN_SJW=tsjw;                                //&#214;&#216;D&#194;í&#172;2&#189;ì&#248;&#212;&#190;&#191;í&#182;è(Tsjw)&#206;atsjw+1&#184;&#246;ê±&#188;&#228;μ¥&#206;&#187;  CAN_SJW_1tq         CAN_SJW_2tq CAN_SJW_3tq CAN_SJW_4tq
        CAN_InitStructure.CAN_BS1=tbs1;                         //Tbs1=tbs1+1&#184;&#246;ê±&#188;&#228;μ¥&#206;&#187;CAN_BS1_1tq ~CAN_BS1_16tq
        CAN_InitStructure.CAN_BS2=tbs2;                                //Tbs2=tbs2+1&#184;&#246;ê±&#188;&#228;μ¥&#206;&#187;CAN_BS2_1tq ~        CAN_BS2_8tq
        CAN_InitStructure.CAN_Prescaler=brp;        //·&#214;&#198;μ&#207;μêy(Fdiv)&#206;abrp+1       
        CAN_Init(CAN1, &CAN_InitStructure);                //3&#245;ê&#188;&#187;ˉCAN1

        CAN_FilterInitStructure.CAN_FilterNumber=0;        //1y&#194;&#203;&#198;÷0
        CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;         //&#198;á±&#206;&#206;&#187;&#196;£ê&#189;
        CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;         //32&#206;&#187;&#191;í
        CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;        //32&#206;&#187;ID
        CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
        CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;//32&#206;&#187;MASK
        CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
        CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//1y&#194;&#203;&#198;÷01&#216;áaμ&#189;FIFO0
        CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;//&#188;¤&#187;&#238;1y&#194;&#203;&#198;÷0

        CAN_FilterInit(&CAN_FilterInitStructure);                        //&#194;&#203;2¨&#198;÷3&#245;ê&#188;&#187;ˉ
       
#if CAN_RX0_INT_ENABLE
        CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);                                //FIFO0&#207;&#251;&#207;¢1òo&#197;&#214;D&#182;&#207;&#212;êDí.                    

        NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;     // &#214;÷ó&#197;&#207;è&#188;&#182;&#206;a1
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;            // ′&#206;ó&#197;&#207;è&#188;&#182;&#206;a0
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
#endif
        return 0;
}   

#if CAN_RX0_INT_ENABLE        //ê1&#196;üRX0&#214;D&#182;&#207;
//&#214;D&#182;&#207;·t&#206;&#241;oˉêy                            
void USB_LP_CAN1_RX0_IRQHandler(void)
{
          CanRxMsg RxMessage;
        int i=0;
    CAN_Receive(CAN1, 0, &RxMessage);
        for(i=0;i<8;i++)
        printf("rxbuf[%d]:%d\r\n",i,RxMessage.Data);
}
#endif

//can·¢&#203;íò&#187;×éêy&#190;Y(1ì&#182;¨&#184;&#241;ê&#189;:ID&#206;a0X12,±ê×&#188;&#214;&#161;,êy&#190;Y&#214;&#161;)       
//len:êy&#190;Y3¤&#182;è(×&#238;′ó&#206;a8)                                     
//msg:êy&#190;Y&#214;&#184;&#213;&#235;,×&#238;′ó&#206;a8&#184;&#246;×&#214;&#189;ú.
//·μ&#187;&#216;&#214;μ:0,3é1|;
//                 &#198;&#228;&#203;&#251;,ê§°ü;
u8 Can_Send_Msg(u8* msg,u8 len)
{       
        u8 mbox;
        u16 i=0;
        CanTxMsg TxMessage;
        TxMessage.StdId=0x12;                        // ±ê×&#188;±êê&#182;·&#251;
        TxMessage.ExtId=0x12;                        // éè&#214;&#195;à&#169;&#213;1±êê&#190;·&#251;
        TxMessage.IDE=CAN_Id_Standard;         // ±ê×&#188;&#214;&#161;
        TxMessage.RTR=CAN_RTR_Data;                // êy&#190;Y&#214;&#161;
        TxMessage.DLC=len;                                // òa·¢&#203;íμ&#196;êy&#190;Y3¤&#182;è
        for(i=0;i<len;i++)
        TxMessage.Data=msg;                                  
        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=RxMessage.Data;  
        return RxMessage.DLC;       
}


















YAV{DIF@YT{E)F8G_}1)J58.png

最佳答案

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

3

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2016-5-22
在线时间
28 小时
 楼主| 发表于 2016-8-1 22:38:48 | 显示全部楼层
CAN总线波特率为500K   串口为115200
回复

使用道具 举报

3

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2016-5-22
在线时间
28 小时
 楼主| 发表于 2016-8-4 09:14:49 | 显示全部楼层
正点原子 发表于 2016-8-1 22:36
当然要一致才行。

问题解决了  计算的波特率与实际的波特率不一样    这是不是晶振的原因  另外我的串口芯片MAX3232今天突然发热严重  且传不了数据  昨天还好好的  今天就突然不行了  是什么原因  原子哥
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 05:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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