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

【转】STM32的USART

转,本文转自http://blog.sina.com.cn/s/blog_4a3946360100wauz.html,仅供参考和学习,版权归原作者学习,好资料故留存借鉴,如原作者不愿本文被转载,请联系我删除!

通用同步异步收发器(USART)提供了一种灵活的方法来与使用工业标准NR 异步串行数据格式的外部设备之间进行全双工数据交换。 USART利用分数波特率发生器提供宽范围的波特率选择。
它支持同步单向通信和半双工单线通信。它也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。用于多缓冲器配置的DMA方式,可以实现高速数据通信。

主要特性:
全双工的,异步通信
NR 标准格式
分数波特率发生器系统
-发送和接收共用的可编程波特率,最高到4.5Mbits/s
可编程数据字长度(8位或9位)
可配置的停止位 -支持1或2个停止位
LIN主发送同步断开符的能力以及LIN从检测断开符的能力
– 当USART硬件配置成LIN时,生成13位断开符;检测10/11位断开符
发送方为同步传输提供时钟
IRDA SIR 编码器解码器
– 在正常模式下支持3/16位的持续时间
智能卡模拟功能
– 智能卡接口支持ISO7816 -3标准里定义的异步协议智能卡
– 智能卡用到的0.5和1.5个停止位
单线半双工通信
使用DMA的可配置的多缓冲器通信
– 在保留的SRAM里利用集中式DMA缓冲接收/发送字节
单独的发送器和接收器使能位
检测标志
– 接收缓冲器满
– 发送缓冲器空
– 传输结束标志
校验控制
– 发送校验位
– 对接收数据进行校验
四个错误检测标志
– 溢出错误
– 噪音错误
– 帧错误
– 校验错误
10个带标志的中断源
– CTS改变
– LIN断开符检测
– 发送数据寄存器
– 发送完成
– 接收数据寄存器
– 检测到总线为空
– 溢出错误
– 帧错误
– 噪音错误
– 校验错误
多处理器通信 – – 如果地址不匹配,则进入静默模式
从静默模式中唤醒(通过空闲总线检测或地址标志检测)
两种唤醒接收器的方式
– 地址位(MSB)
– 空闲总线

 

PT4115做调光电路,驱动大功率LED发光二极管

前两天,用铝基板做了2块电路板,感觉是:能不用铝基板就不用铝基板,板面大小上去了,散热太快,屏蔽电感焊起来太费劲

关于PT4115,引用一段官方datasheet的介绍性文字

PT4115 是一款连续电感电流导通模式的降压恒流源,用于驱动一颗或多颗串联LED。PT4115 输入电压范围从6V 到30V,输出电流可调,最大可达1.2A。根据不同的输入电压和外部器件,PT4115 可以驱动高达数十瓦的LED。PT4115 内置功率开关,采用高端电流采样设置LED 平均电流,通过DIM 引脚可以接受模拟调光和很宽范围的PWM 调光。当DIM 的电压低于0.3V 时,功率开关关断,PT4115 进入极低工作电流的待机状态。

这块片子是开关降压型,而不是线性,所以当外部电压较高时可以减少一些损耗,片子对散热要求也不高,其次电路简单,设计容易,芯片,二极管,电阻电容电感用的都不多。

我做的是可调光的,属性部分不做过多介绍,自行查看datasheet吧,datasheet自行百度文库。

关于调光,我采用的是电位器来给DIM电压值来调光,DIM输入0-2.5V,0.3V以下关闭,而2.5V电压使用2.7V稳压二极管来获取。

4115

关于电路图,D二极管我使用了M7普通二极管,DIM给定调光电压 Rs根据datasheet上给定的

1

最大亮度为Vdim为2.5时的亮度,可以区最大电流=0.1/Rs,如我串联2个发光二极管,压降大约在6v,电阻取3个1欧并联大约就为2w,尤其注意,主要电流要从Rs流过,要考虑电阻的功率问题

4115倒也没有其他太值得注意的地方,把我的电路图放出来吧,

2

51单片机的外部中断

转自http://blog.csdn.net/yanghuazhou/article/details/6328938

好东西啊

相关知识:
1、51单片机的5大中断源:串行口中断、定时中断1、外部中断1、定时中断0、外部中断0;
2、中断源的编号: 串行口中断为4、定时中断1为3、外部中断1为2、定时中断0为1、外部中断0为0;
3、中断源的优先级:按以上顺序排列,串行口中断最低、外部中断0最高;
4、使用外部中断0和1,必须TCON寄存器设置其触发方式是低电平触发(0)还是下降沿触发(1);
5、使用前必须通过IE寄存器打开总中断和自己的中断;

运行了20天的宿舍桌面电源自动控制单片机今天终于宕机了

为了减少桌面电源适配器的数量,这个小东西我集成了我的各种电子产品的充电器功能和路由器的供电功能,今天突然间发现vnc连接不上,一开始以为是电脑的问题,排查完就然发现路由器停止供电了,而且通过开关命令和1602显示屏的监测均不能开启,只有重启了供电,问题解决
单片机IO口使用的均已经加了上拉电阻,但是程序却跑飞了(其他控制没问题,只有路由器控制开关打不开),没有加看门狗,20天出问题,倒是也还可以接受

CH-340(HL-340)usb转串口驱动,实测windows7 64位可用

 

首先,请移步下载windows7 64位可用的CH-340(HL-340)驱动

http://down.num114.com/HL-340.rar
HL-340.rar

1.打开测试模式开.bat(不要开错了)
2.重启(进入桌面,右下角有测试模式的字样)
3.进入设备管理器(计算机右键—>管理—>设备管理器),找到那个识别不出的USB,右键选择更新驱动,选从本地查找,选择CH340驱动的目录,安装就可以了
4.打开测试模式关.bat,再重启就没有了

一些单片机的实用教程

本链接下包括很多软件,源程序,一系列视频教程及其PPT

适合单片机初学者

该教程主要讲述stc89c52rc和P89v51单片机的实验与应用

链接地址http://www.verycd.com/topics/2867187/

本链接来源:金沙滩工作室http://www.kingst.org,一个单片机论坛