stm32f103 can初始化详解

昨天测试了下自制的can测试板,代码直接通过开发板资料代码修改的,初始化代码都差不多,只需要改IO配置即可,即 CAN_GPIO_Config函数中的配置,而初始化过程为:先加载CAN_GPIO_Config(),再加载CAN_INIT()


/*CAN GPIO 和时钟配置 */
 void CAN_GPIO_Config(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;
 /* 复用功能和GPIOB端口时钟使能*/
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA, ENABLE);

/* CAN1 模块时钟使能 */
 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);

 //#define GPIO_Remap_CAN GPIO_Remap1_CAN1 本实验没有用到重映射I/O
// GPIO_PinRemapConfig(GPIO_Remap1_CAN1, ENABLE);
}

/* CAN初始化 */
 void CAN_INIT(void)
{
 CAN_InitTypeDef CAN_InitStructure;
 CAN_FilterInitTypeDef CAN_FilterInitStructure;
 CanTxMsg TxMessage;

/* CAN register init */
 CAN_DeInit(CAN1); //将外设CAN的全部寄存器重设为缺省值
 CAN_StructInit(&CAN_InitStructure);//把CAN_InitStruct中的每一个参数按缺省值填入

/* 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;//没有使能接收FIFO锁定模式
 CAN_InitStructure.CAN_TXFP=DISABLE;//没有使能发送FIFO优先级
 CAN_InitStructure.CAN_Mode=CAN_Mode_Normal;//CAN设置为正常模式
 CAN_InitStructure.CAN_SJW=CAN_SJW_1tq; //重新同步跳跃宽度1个时间单位
 CAN_InitStructure.CAN_BS1=CAN_BS1_3tq; //时间段1为3个时间单位
 CAN_InitStructure.CAN_BS2=CAN_BS2_2tq; //时间段2为2个时间单位
 CAN_InitStructure.CAN_Prescaler=60; //时间单位长度为60
 CAN_Init(CAN1,&CAN_InitStructure);
 //波特率为:72M/2/60(1+3+2)=0.1 即100K

/* CAN filter init */
 CAN_FilterInitStructure.CAN_FilterNumber=1;//指定过滤器为1
 CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;//指定过滤器为标识符屏蔽位模式
 CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;//过滤器位宽为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=CAN_FIFO0;// 设定了指向过滤器的FIFO为0
 CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;// 使能过滤器
 CAN_FilterInit(&CAN_FilterInitStructure);// 按上面的参数初始化过滤器

/* CAN FIFO0 message pending interrupt enable */
 CAN_ITConfig(CAN1,CAN_IT_FMP0, ENABLE); //使能FIFO0消息挂号中断

 }

转载加补充,在windows下如何配置RTT开发环境?

本文转载自 http://blog.csdn.net/flydream0/article/details/10078321 由于python与scons的版本不同可能引发各种奇葩的不兼容的问题,所以按照原文的版本补充下载链接。仅作交流学习之用,文章版权归原作者所有,同时也感谢原作者的指导,我成功的配置了RTT并编译通过

1 下载安装Python2.7

目前此版本已经比较老,原文给定链接已经失效,重新贴上链接

http://www.python.org/download/releases/2.7.5/

下载时注意32位和64位

2 下载并安装scons

现在已经出来了2.3版本,但是只是为了编译RTT,所以还是按照教程下载2.2,在百度快照中找到了老版本的链接

http://prdownloads.sourceforge.net/scons/scons-2.2.0-setup.exe