打印
[STM32F1]

关于使用CAN总线发送数据的问题

[复制链接]
801|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小老千|  楼主 | 2017-3-7 12:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 小老千 于 2017-3-8 13:04 编辑

在用STM32自带的CAN发送16位数据时明明没有设置高16的值,然而在调试时高位TDHR为0x1B4900,是什么原因?

can初始化:

void CAN_GPIO_Config(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA, ENABLE);                                                                                                                        
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
  /* Configure CAN pin: RX */         // PA11
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;        
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  
  /* Configure CAN pin: TX */   // PA12
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  
  //GPIO_PinRemapConfig(GPIO_Remap1_CAN1, ENABLE);
}

void CAN_INIT(void)
{
  CAN_InitTypeDef        CAN_InitStructure;
  CAN_FilterInitTypeDef  CAN_FilterInitStructure;
  CanTxMsg TxMessage;  
  /* CAN register init */
  CAN_DeInit(CAN1);        
  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_InitStructure.CAN_SJW=CAN_SJW_1tq;
  CAN_InitStructure.CAN_BS1=CAN_BS1_3tq;
  CAN_InitStructure.CAN_BS2=CAN_BS2_2tq;
  CAN_InitStructure.CAN_Prescaler=60;  
  CAN_Init(CAN1,&CAN_InitStructure);
  /* CAN filter init */
  CAN_FilterInitStructure.CAN_FilterNumber=1;
  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;
  CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
  CAN_FilterInit(&CAN_FilterInitStructure);

  /* CAN FIFO0 message pending interrupt enable */
CAN_ITConfig(CAN1,CAN_IT_FMP0, ENABLE);
}
void can_tx(u16 Data1)
{
  CanTxMsg TxMessage;  
  TxMessage.StdId=0x11;        
  TxMessage.ExtId=0x0000;
  TxMessage.IDE=CAN_ID_STD;
  TxMessage.RTR=CAN_RTR_DATA;
  TxMessage.DLC=2;        
  TxMessage.Data[0]=Data1/256;
  TxMessage.Data[1]=Data1%256;
  CAN_Transmit(CAN1,&TxMessage);
}
计算:
int main(void)
{        
        u16 ADC_Value;
         ADCx_Init();
         CAN_INIT();
         CAN_GPIO_Config();
         CAN_NVIC_Configuration();
        while (1)
        {
                 filter();
                 ADC_Value = After_filter*3300/4096;
                can_tx(ADC_Value);

                Delay(0xffffee);  
        }
沙发
xyz549040622| | 2017-3-7 14:44 | 只看该作者
是不是32位的数据,虽然没设置高16位,但还是有值的。

使用特权

评论回复
板凳
mmuuss586| | 2017-3-7 16:05 | 只看该作者
都没说,是哪个变量有值;
你程序跟踪下,哪里填充了数据就知道了

使用特权

评论回复
地板
ghuca| | 2017-3-7 17:23 | 只看该作者
初始化的时候怎么设置的

使用特权

评论回复
5
ghuca| | 2017-3-7 17:26 | 只看该作者
有可能数据没有设置是随机的。

使用特权

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

本版积分规则

3

主题

4

帖子

0

粉丝