繁体   English   中英

stm32f4 发现 CAN 传输

[英]stm32f4 discovery CAN transmit

这是我的CAN传输程序。 我只想通过示波器查看是否正在发送某些内容。 我正在使用 stm32f407 和 attolic true studio,但我在 tx 引脚上看不到任何信号。 请告诉我我的错误在哪里。 我是否需要在外部连接收发器,以及如何访问 CAN_H 和 CAN_L 引脚。

#include "stm32f4xx.h"
int main(void)
{
  GPIO_InitTypeDef      GPIO_InitStructure;

  RCC_ClocksTypeDef     RCC_Clocks;
CAN_InitTypeDef       CAN_InitStructure;
 CAN_FilterInitTypeDef CAN_FilterInitStructure;
  CanTxMsg TxMessage;
 RCC_GetClocksFreq(&RCC_Clocks);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);`
GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_CAN1);
 GPIO_PinAFConfig(GPIOD, GPIO_PinSource1, GPIO_AF_CAN1);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOD, &GPIO_InitStructure);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
CAN_DeInit(CAN1);
CAN_StructInit(&CAN_InitStructure);
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_6tq;
CAN_InitStructure.CAN_BS2 = CAN_BS2_7tq;
CAN_InitStructure.CAN_Prescaler = 4;
  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_FIFO0;
CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
  CAN_FilterInit(&CAN_FilterInitStructure);
  // transmit */
TxMessage.StdId= 0x123;
TxMessage.ExtId= 0x00;
TxMessage.RTR= CAN_RTR_DATA;
TxMessage.IDE= CAN_ID_STD;
TxMessage.DLC= 4;
TxMessage.Data[0]= 0x02;
TxMessage.Data[1]= 0x11;
TxMessage.Data[2]=0x11;
TxMessage.Data[3]=0x11;

while(1)
{

volatile uint_t i;

unit8_t TransmitMailbox= 0;
//sprintf(TxMessage.Data, "Imran\n");


TransmitMailbox= CAN_Transmit(CAN1,&TxMessage);

i=0;
while((CAN_TransmitStatus(CAN1,TransmitMailbox) !=CANTXOK)&& (i !=0xFFFFFF))
{
i++;
} 
}
 }

尝试通过更改为以下行来打开自动唤醒:

CAN_InitStructure.CAN_AWUM = ENABLE;        

stm32f407只有CAN控制器,没有内部收发器,所以需要外接。 此外,您必须将另一个设备连接到您的 CAN 总线上才能看到一些东西(记住关于终结器)。

请解释你说的意思是什么:

how can i access CAN_H and CAN_L pins  

附注。 您不应该将每个功能都放在一个例程中,因为它是不可读的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM