|
楼主 |
发表于 2018-8-14 09:04:18
|
显示全部楼层
电路图我只按实际应用加了光藕,我现在担心光藕问题用跳线短接了如下图f:\louwenyan\pic\1.jpg
CAN1_TX 接407的PH13 ,CAN1_RX接407的PI9
程序如下:
void can_demo(void)
{
uint8_t ucKeyCode; /* °´¼ü´úÂë */
can1_Init(); /* ³õʼ»¯STM32 CAN1Ó²¼þ */
can1_NVIC_Config(); /* ÅäÖÃCAN1ÖÐ¶Ï */
//can2_Init(); /* ³õʼ»¯STM32 CAN2Ó²¼þ */
//can2_NVIC_Config(); /* ÅäÖÃCAN2ÖÐ¶Ï */
SendCan1Msg();
while(1)
{
stat=CAN_TransmitStatus(CAN1,Mailbox1);
if(stat==1)
{
SendCan1Msg();
}
}
}
static void SendCan1Msg(void)
{
g_tCanTxMsg.Data[0] = g_ucLedNo;
Mailbox1=CAN_Transmit(CAN1, &g_tCanTxMsg);
}
#define CAN1_CLK RCC_APB1Periph_CAN1
#define CAN1_RX_PIN GPIO_Pin_9
#define CAN1_TX_PIN GPIO_Pin_13
#define CAN1_GPIO_TX_PORT GPIOH
#define CAN1_GPIO_TX_CLK RCC_AHB1Periph_GPIOH
#define CAN1_GPIO_RX_PORT GPIOI
#define CAN1_GPIO_RX_CLK RCC_AHB1Periph_GPIOI
#define CAN1_AF_PORT GPIO_AF_CAN1
#define CAN1_RX_SOURCE GPIO_PinSource9
#define CAN1_TX_SOURCE GPIO_PinSource13
static void can1_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
CAN_InitTypeDef CAN_InitStructure;
CAN_FilterInitTypeDef CAN_FilterInitStructure;
RCC_AHB1PeriphClockCmd(CAN1_GPIO_TX_CLK|CAN1_GPIO_RX_CLK, ENABLE);
GPIO_PinAFConfig(CAN1_GPIO_RX_PORT, CAN1_RX_SOURCE, CAN1_AF_PORT);
GPIO_PinAFConfig(CAN1_GPIO_TX_PORT, CAN1_TX_SOURCE, CAN1_AF_PORT);
GPIO_InitStructure.GPIO_Pin = CAN1_RX_PIN;
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(CAN1_GPIO_RX_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = CAN1_TX_PIN;
GPIO_Init(CAN1_GPIO_TX_PORT, &GPIO_InitStructure);
RCC_APB1PeriphClockCmd(CAN1_CLK, ENABLE);
CAN_DeInit(CAN1);
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_7tq;
CAN_InitStructure.CAN_BS2 = CAN_BS2_6tq;
CAN_InitStructure.CAN_Prescaler = 6;
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);
g_tCanTxMsg.StdId = 0x321;
g_tCanTxMsg.ExtId = 0x01;
g_tCanTxMsg.RTR = CAN_RTR_DATA;
g_tCanTxMsg.IDE = CAN_ID_STD;
g_tCanTxMsg.DLC = 1;
}
程序基本就V5板的CAN例子改了一下
|
|