代码如下
[mw_shl_code=c,true]#include "stm32f10x.h"
#include <stdio.h>
#include "stm32f10x.h"
CAN_InitTypeDef CAN_InitStructure;
CAN_FilterInitTypeDef CAN_FilterInitStructure;
CanTxMsg TxMessage;
void NVIC_Config(void);
void CAN_Config(void);
//void LED_Display(uint8_t Ledstatus);
//void Init_RxMes(CanRxMsg *RxMessage);
void Delay(void);
int main(void)
{
/*!< At this stage the microcontroller clock setting is already configured,
this is done through SystemInit() function which is called from startup
file (startup_stm32f10x_xx.s) before to branch to application main.
To reconfigure the default setting of SystemInit() function, refer to
system_stm32f10x.c file
*/
/* NVIC configuration */
NVIC_Config();
/* CANs configuration */
CAN_Config();//CAN初始化
/* IT Configuration for CAN1 */
CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);//中断
/* IT Configuration for CAN2 */
// CAN_ITConfig(CAN2, CAN_IT_FMP0, ENABLE);
/* Infinite loop */
while(1)
{
TxMessage.Data[0] = 0x55;
CAN_Transmit(CAN1, &TxMessage); //CAN发送
}
}
void CAN_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* Configure CAN1 and CAN2 IOs **********************************************/
/* GPIOB, GPIOD and AFIO clocks enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);//GPIO时钟使能
/* Configure CAN1 RX pin */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//PA11上拉输入
GPIO_Init(GPIOA, &GPIO_InitStructure);
// /* Configure CAN2 RX pin */
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
// GPIO_Init(GPIOB, &GPIO_InitStructure);
/* Configure CAN1 TX pin */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//PA12复用推挽输出
GPIO_Init(GPIOA, &GPIO_InitStructure);
// /* Configure CAN2 TX pin */
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
// GPIO_Init(GPIOB, &GPIO_InitStructure);
/* Remap CAN1 and CAN2 GPIOs */
// GPIO_PinRemapConfig(GPIO_Remap2_CAN1 , ENABLE);
// GPIO_PinRemapConfig(GPIO_Remap_CAN2, ENABLE);
/* Configure CAN1 and CAN2 **************************************************/
/* CAN1 and CAN2 Periph clocks enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); //CAN时钟使能
/* CAN1 and CAN2 register init */
CAN_DeInit(CAN1);
// CAN_DeInit(CAN2);
/* Struct init*/
CAN_StructInit(&CAN_InitStructure);
/* CAN1 and CAN2 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 = ENABLE;
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 =12;//波特率500K
/*Initializes the CAN1 and CAN2 */
CAN_Init(CAN1, &CAN_InitStructure);
// CAN_Init(CAN2, &CAN_InitStructure);
/* CAN1 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 = 0x6420;
CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);
/* CAN2 filter init */
// CAN_FilterInitStructure.CAN_FilterIdHigh =0x2460;
// CAN_FilterInitStructure.CAN_FilterNumber = 15;
// CAN_FilterInit(&CAN_FilterInitStructure);
/* Transmit */
TxMessage.StdId = 0x321;
TxMessage.ExtId = 0x01;
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 1;
}
void NVIC_Config(void)
{
// NVIC_InitTypeDef NVIC_InitStructure;
// NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
//
// NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn;
// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0;
// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0;
// NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
// NVIC_Init(&NVIC_InitStructure);
// NVIC_InitStructure.NVIC_IRQChannel = CAN2_RX0_IRQn;
// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x1;
// NVIC_Init(&NVIC_InitStructure);
}
void Delay(void)
{
uint16_t nTime = 0x0000;
for(nTime = 0; nTime <0xFFF; nTime++)
{
}
}[/mw_shl_code]
编译没错误没警告,下载也正常,但接收不到数据,已经使用正确的程序测试过板子,可以正常通信。是个菜鸟,在使用库函数的时候用不用对库中的其他文件进行编辑呢,例如启动文件那些。
|