请教:
我的程序如下,但调试时始终发不出去(示波器没波形),不知道什么原因?
请各位帮我审一下,谢谢了。我卡这里都一天了。
时钟:
RCC_ClocksTypeDef rcc_clocks;
RCC_GetClocksFreq(&rcc_clocks);
SysTick_Config(rcc_clocks.HCLK_Frequency / OS_TICKS_PER_SEC);
GPIO初始化:
GPIO_InitTypeDef GPIO_InitStructure;
/* 将所有GPIO口的时钟都开启 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC |
RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE , ENABLE);
/* PB5配置为推挽输出 */
/* 用于控制程序工作指示灯 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* PD8~PD15配置为推挽输出 */
/* 用于控制数码管的显示值 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);
/* PC6、PC7配置为推挽输出 */
/* 用于控制数码管的位置DIG1和DIG2 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
/* PA8、PA9配置为推挽输出 */
/* 用于控制数码管的位置DIG3和DIG4 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* 配置CAN通迅的: RX = PD0*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOD, &GPIO_InitStructure);
/* 配置CAN通迅的: TX = PD1*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);
/* 重映像AFIO,使PD0、PD1为CAN的RX和TX */
GPIO_PinRemapConfig(GPIO_Remap2_CAN1, ENABLE);
CAN初始化:
CAN_InitTypeDef CAN_InitStructure;
CAN_FilterInitTypeDef CAN_FilterInitStructure;
/* CAN时钟开启 */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
/* CAN初始化 */
/* CAN寄存器初始化 */
CAN_DeInit(CAN1);
CAN_StructInit(&CAN_InitStructure);
/* CAN cell init:设置CAN的MCR和BTR寄存器 */
CAN_InitStructure.CAN_TTCM = DISABLE; /* 关闭时间触发通信模式 */
CAN_InitStructure.CAN_ABOM = DISABLE; /* 软件对INRQ置1并清0后,检测到128次11位连续的隐性位,就退出离线状态 */
CAN_InitStructure.CAN_AWUM = DISABLE; /* 自动唤醒模式:由软件唤醒 */
CAN_InitStructure.CAN_NART = DISABLE; /* 发送错误后自动重传 */
CAN_InitStructure.CAN_RFLM = DISABLE; /* 接收FIFO不锁定,后面覆盖前面的 */
CAN_InitStructure.CAN_TXFP = DISABLE; /* 报文标识符决定优先级 */
CAN_InitStructure.CAN_Mode = CAN_Mode_Normal; /* 正常模式 */
CAN_InitStructure.CAN_SJW = CAN_SJW_1tq; /* 同步跳跃宽度:1个时间上限 */
CAN_InitStructure.CAN_BS1 = CAN_BS1_8tq; /* 时间段1:8个时间单元 */
CAN_InitStructure.CAN_BS2 = CAN_BS2_7tq; /* 时间段2:7个时间单元 */
CAN_InitStructure.CAN_Prescaler = 45; /* 波特率分频器:tq = 5*tPCLK 计算得到:波特率100kb/s*/
CAN_Init(CAN1, &CAN_InitStructure); /* 完成后退出初始化状态,进入正常工作模式 */
/* CAN filter init */
CAN_FilterInitStructure.CAN_FilterNumber = 0; /* 待初始化过滤器序号 */
CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask; /* 标识符屏蔽位模式和标识符列表模式选择 */
CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit; /* 标识符位宽设置:2个16位或1个32位 */
CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000;/* 标识符寄存器高16位 */
CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000;/* 标识符寄存器低16位 */
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000;/* 屏蔽寄存器高16位 */
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;/* 屏蔽寄存器低16位 */
CAN_FilterInitStructure.CAN_FilterFIFOAssignment= 0; /* 过滤器被关联到FIFO0 */
CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);
CAN发送:
CanTxMsg TxMessage;
CanRxMsg RxMessage;
u16 i=0;
u8 TransmitMailbox;
TxMessage.StdId=0x11;
TxMessage.RTR=CAN_RTR_DATA;
TxMessage.IDE=CAN_ID_STD;
TxMessage.DLC=2;
TxMessage.Data[0]=0xCA;
TxMessage.Data[1]=0xFE;
for(;;)
{
OSTimeDly(500);
TransmitMailbox = CAN_Transmit(CAN1, &TxMessage);
} |