打印

请教CAN发送问题.

[复制链接]
5435|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
keer_zu|  楼主 | 2008-7-14 11:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
https://bbs.21ic.com/upfiles/img/20078/2007829115658758.jpg

STM32调试CAN,无法在TX pin 看到数据,老是上图左下角的提示(MDK):
TX pin disabled


是不是这个原因,这个需要设置那个寄存器?

引脚我也初始化了:
 /* Configure CAN pin: RX */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
  
  /* Configure CAN pin: TX */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOD, &GPIO_InitStructure);

请教各位了?

           
沙发
香水城| | 2008-7-14 11:51 | 只看该作者

请用示波器看

使用特权

评论回复
板凳
keer_zu|  楼主 | 2008-7-14 12:16 | 只看该作者

回复版主

我用示波器看过了不行才注意到上图对话框里的Tx pin disable

怎么才能把它设置为 enable? 然后我再用示波器看一看

使用特权

评论回复
地板
keer_zu|  楼主 | 2008-7-14 13:36 | 只看该作者

其它相关窗口

https://bbs.21ic.com/upfiles/img/20078/2007829135139463.jpg
https://bbs.21ic.com/upfiles/img/20078/2007829135157537.jpg

使用特权

评论回复
5
keer_zu|  楼主 | 2008-7-14 13:40 | 只看该作者

....

https://bbs.21ic.com/upfiles/img/20078/2007829135550535.jpg

使用特权

评论回复
6
zjf0000| | 2008-7-14 13:41 | 只看该作者

注意一下你的管脚是否需要重映射

使用特权

评论回复
7
keer_zu|  楼主 | 2008-7-15 09:47 | 只看该作者

端口重映射了,还不行,这个应该不是端口重映射问题

使用特权

评论回复
8
starm| | 2008-7-15 09:49 | 只看该作者

不知道是否要使能AFIO时钟 ?

使用特权

评论回复
9
keer_zu|  楼主 | 2008-7-15 10:04 | 只看该作者

这个也使能了,现在就这个没使能

TX pin disabled

引脚初始化:
/* Configure CAN pin: RX */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
  
  /* Configure CAN pin: TX */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOD, &GPIO_InitStructure);

使用特权

评论回复
10
ST_ARM| | 2008-7-15 10:27 | 只看该作者

我的代码,肯定可以运行

IO口初始化部分
    /* Enable the USART2 Pins Software Remapping */
    GPIO_PinRemapConfig(GPIO_Remap2_CAN, ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(GPIOD, &GPIO_InitStructure);        /* Configure CAN pin: RX */

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOD, &GPIO_InitStructure);        /* Configure CAN pin: TX */


CAN初始化部分:
    /* CAN register init */
    CAN_DeInit();
    CAN_StructInit(&CAN_InitStructure);

    /* CAN 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_Mode_LoopBack
    CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
    CAN_InitStructure.CAN_BS1 = CAN_BS1_8tq;
    CAN_InitStructure.CAN_BS2 = CAN_BS2_7tq;
    CAN_InitStructure.CAN_Prescaler = 5;
    Error = CAN_Init(&CAN_InitStructure);
    if (Error == 0)
        return FAILED;

    /* CAN 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 = CAN_FIFO0;    //0;
    CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
    CAN_FilterInit(&CAN_FilterInitStructure);

使用特权

评论回复
11
keer_zu|  楼主 | 2008-7-15 10:41 | 只看该作者

我的代码和你的一样,现在是

Tx pin disable,这个怎么使能?我查过相关寄存器了,只想知道哪个地方可以让
Tx pin enable

使用特权

评论回复
12
keer_zu|  楼主 | 2008-7-15 15:00 | 只看该作者

香版主,请指点.

使用特权

评论回复
13
香水城| | 2008-7-15 15:03 | 只看该作者

对不起,没玩过,我不会CAN

使用特权

评论回复
14
keer_zu|  楼主 | 2008-7-15 15:13 | 只看该作者

我只问个寄存器设置问题啊

如何设置才能让Tx pin enable

帮我问问好吗?谢谢

使用特权

评论回复
15
ST_ARM| | 2008-7-15 15:31 | 只看该作者

请问你的时钟配置了没有?

请贴出你的时钟配置程序。

使用特权

评论回复
16
keer_zu|  楼主 | 2008-7-15 16:09 | 只看该作者

时钟初始化

  /* RCC system reset(for debug purpose) */
  RCC_DeInit();

  /* Enable HSE */
  RCC_HSEConfig(RCC_HSE_ON);               //配置外部高速振荡器

  /* Wait till HSE is ready */
  HSEStartUpStatus = RCC_WaitForHSEStartUp();

  if(HSEStartUpStatus == SUCCESS)
  {
    /* HCLK = SYSCLK */
    RCC_HCLKConfig(RCC_SYSCLK_Div1); 
  
    /* PCLK2 = HCLK */
    RCC_PCLK2Config(RCC_HCLK_Div1); 

    /* PCLK1 = HCLK/2 */
    RCC_PCLK1Config(RCC_HCLK_Div2);

    /* Enable Prefetch Buffer */
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

    /* Select HSE as system clock source */
    RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE);

    /* Wait till HSE is used as system clock source */
    while(RCC_GetSYSCLKSource() != 0x04)
    {
    }
  }
  
  /* GPIOA and GPIOC clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA  | RCC_APB2Periph_GPIOC, ENABLE);

  /* CAN Periph clock enable */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN, ENABLE);
  //================
  RCC -> APB2ENR |= 0X00000001;     //
  //================

使用特权

评论回复
17
ST_ARM| | 2008-7-15 16:25 | 只看该作者

你漏了AFIO使能

如下设置GPIO的时钟使能:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA  | RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);

使用特权

评论回复
18
keer_zu|  楼主 | 2008-7-15 16:36 | 只看该作者

回ST_ARM,谢谢你帮我

RCC -> APB2ENR |= 0X00000001;     //这个就是AFIO使能啊?


怎么让Tx pin disable,
变为Tx pin enable?
我想问题应该就是这里.不过就是找不到在哪个寄存器设置

使用特权

评论回复
19
ijk| | 2008-7-15 17:27 | 只看该作者

参考ST提供的例子

参考ST提供的例子,跟自己的具体情况进行修改,应该不难的。印象里,ST也提供了Keil环境下的例子。

使用特权

评论回复
20
keer_zu|  楼主 | 2008-7-15 17:42 | 只看该作者

我就是按照ST的例子改的,发送就这一点绊住了.

还望大家给我提个醒!谢谢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1350

主题

12427

帖子

53

粉丝