为了用stm32f207系列144封装芯片替代103系列的芯片有三个地方需要注意:
30脚: 207是VDD,而103是VSS,所以必须改为VDD,或者作冗余设计
106脚:207是VCap,103是NC,207的必须将106脚接2.2uf电容到地,103的悬空
71脚; 207是VCap,103是VSS,还是207必须将71脚接2.2uf电容到地。
Vcap是稳定内部1.8V的核用的,要连接一个2.2uF的电容(ESR要小,距离MCU越近越好)你实际用表测一下Vcap的电压,你会发现它是1.8V(手册上说这个是内核供电电压滤波的Vcap电容不能省,否则就不能用仿真器下载程序了)
大概搞好了stm32的usb device之后,开始搞fatfs文件系统,大概了解一下fatfs文件系统的结构和移植需要修改的地方之后,打算仍旧使用内部flash作存储空间,加上之前做的u盘,就可以用fatfs通过串口操作发送命令,新建,删除,读写文件,然后插上usb通过电脑反映出来 。同时也可以在 电脑上操作文件,然后通过fatfs用串口读出来验证。试验中为了方便调试,使用了正点原子的USMART调试组件。参考网上关于fatfs文件系统移植 的设置,修改disk_io.c,其中的存储器操作函数和usb中一样都是用内部flash的操作函数。123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081#define FLASH_START_ADDR 0x0803fc00 // Flash start address #d
...
自己写的第一个上位机程序ESB_USBK v1.0 完成了,说几个跟开发环境有关系的问题
VS2010打包好的程序,放在别的电脑上,如果程序文件删除一个,再次点击桌面快捷方式,就提示要插入磁盘重新安装:因为VS2010的打包程序把快捷方式设置为文件夹了,而不是.exe文件这个是VS自己的问题,微软的帮助和支持网站上已经指出并提出了解决方案。但是网站上的解决方案讲的并不清楚。简单的解决方案为:
先去下载msi编辑软件orca,可以去这里下载:http://www.52z.com/soft/10568.Html
启动orca。
在“文件”菜单中上, 单击“打开”。
在“打开”对话框找到包含YourApplicationSetup.msi文件的文件夹。
单击YourApplicationSetup.msi文件,然后单击“打开”。
在“表”窗格中,单击“shortcut”。
在右窗格中,选择在“Name”列中对应“YourApplication.exe”值的行,点击该行的“Target”列,VS安装程序生成的快捷方式对应的值为“DefaultFeature”,将其改为“[TARGETDI
...
最近一直在搞这个,搞得比较清楚了,写出来记录下:
基本思路固件升级的基本思路是: 将stm32 的flash划分为两个区域:
Bootloader区:存放bootloader的代码,bootloader代码完成的主要功能就是:判断外部条件,如果需要更新固件,则从指定位置(外接的U盘?板子上的外置存储器如 SD卡,NandFlash等)读取bin文件,然后写入到stm32 Flash的APP区,完成后跳转到APP区执行更新过的代码;如果不需要更新,则直接跳转到APP区执行主程序代码。
APP区:存放应用程序代码,就是我们产品的固件了。
目做了两个升级方式,都是USB的:
一个是USB host:开机进boot,boot检测是否有U盘插入,U盘中是否包含APP的bin文件,包含则更新并跳转到APP;
一个是USB device:在APP区,做了usb device的代码,将板上的nandflash作为U盘的存储器,通过USB线链接PC,则PC显示U盘,将APP的bin文件复制到U盘里,并设置一个标志文件,下次开机进boot会判断nandfalash里是否有需要更
...
简介为了熟悉USB协议,熟悉stm32 usb固件库的结构和使用方法,决定用它做一个u盘,正点原子开发板上面有例子把sd卡和spi flash作为存储器的u盘,参考这些例子和网上的资料,用内部flash作为存储空间,做了一个小u盘。
stm32内部flash大小为512kbytes,以页为单位,每页2kbytes,256页,起始地址为0800 0000,程序要占用200多kbytes的空间,所以把最后的256kbytes作为u盘的存储空间,地址为0803 fc00到结束地址。
固件库移植正点原子例子上面用的usb固件库是2.2版本的,我使用的是最新4.0版本,首先要做的就是先搞好4.0版本的移植。根据网上资料,官方固件库里的例子,USB固件库的核心协议包括core,init,int,regs,sil,mem这6个C文件,这些文件完成了USB枚举,标准请求的路由等功能,可以说给USB通信搭建了基础,其它具体的子类协议应用都是在这个基础上搭建起来的。这6个文件不用修改,直接包含到工程中。
使用固件库做mass storage device协议,参考官方固件库里面的例子,需要用到mass_m
...
注意JTAG引脚,这些脚默认都是不受控制的,要使用必须关闭JTAG,比如我要用SPI3,一直不成功,发现SCK没有正确输出信号,原来是JTAG脚,后来查手册才知道要用JTAG脚做别的功能必须先关闭JTAG。103固件库函数如下:先使能AFIO时钟,然后调用GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);关了JTAG,SPI3就可以正常使用了。
固件导致 芯片锁死 无法再编程或者调试:我用timer中断和ADC+DMA的时候,程序运行时OK的,但是只要烧录了这个固件,就没办法再烧程序了,必须将BOOT0设置为高电平,从系统存储器启动,才能再烧程序。查了很多资料,其中有用的是;STM32单片机一般的连接方式是主闪存存储器启动模式,即BOOT0为0,这样在用JTAG或SW写进程序的时候,如果该程序工程中芯片选型不正确或着程序中复用了JTAG或SW复用引脚导致程序执行后出现启动配置错误或者调试引脚被占用而引起的芯片锁死或Jlnk连接不上的问题,则把BOOT0和BOOT1跳成1和0,让内部程序不运行,然后再重新下载另外的程序,再改回
...
去年在上家公司做了很多东西,自己也长进了很多,今年5月份换了新工作,上班半个多月,感觉不错。跳槽期间,苦恼很多,感触很多,现在安定下来,写点东西记录下感受。
总结下在小公司工作的优缺点:小公司优点:
人少,所以你不是一个螺丝钉,你要做的事情很多,对于刚毕业的来说,不必担心学不到东西。
人少,所以老板就坐在你后面,和你一起工作,一起吃饭,偶尔能像一个朋友。从好的老板身上可以学到很多,他能自己创办公司,领导这么多人白手起家做起来,已经超越一般人很多了。
人少, 所以基本上每个人都认识,大部分都是朋友,如果看重中公司前景,以后公司发展好了,跟随公司一起成长起来的你,应该会有不错的位置和待遇。额,暂时能想到的就这么多了。
小公司缺点:
加班没工资,工资低,福利待遇差这些就不多说了,因为小公司,活着都是个问题,当然处处节省,除了那些发展特别好的公司。
人少,技术上的东西积累少,可能没人带你,很多东西你自己摸索一个星期,上网找资料,各种郁闷,如果有牛人指导,或者有资料,可能2,3天就做出来了。
很多时候,你费尽心思,绞尽脑汁做出来的东西,自以为很不错了,可实际上在别人眼里都是很简单的东西
...
还是老样子不写网上可以搜索到的基础知识,写比较关键的实际应用比较实用的东西。本篇文章中说到的所有东西都是对Cypress PSOC1芯片基础上实现SPI液晶驱动的总结。
SPI通讯时序几个模式的区别开始的时候总是对SPI通信时序的Mode 0,1,2,3分不清楚。
CPOL:时钟极性,CPOL=0:空闲时SCK为低电平,第一个SCK脉冲由上升沿开始CPOL=1:空闲时SCK为高电平,第一个SCK脉冲由下降沿开始
CPHA:时钟相位,CPHA=0:第一个跳变沿采集数据,也就是说未开始之前,第一个数据已经准备好,第一个跳变沿就直接开始采集CPHA=1:第二个跳变沿采集数据,也就是说未开始之前,第一个数据可以没准备,可以在第一个SCK跳变沿准备,第二个采集
例子举个实际例子,就是液晶屏SPI通信时的一段最基本的通信代码,使用IO引脚软件模拟SPI时序:123456789101112for(i = 0; i<8; i++) //8位数据, 先高后低 { if(wbyte & 0x80) {LCD_DIN_HIGH;} else &
...
看MOS管datasheet上的参数的时候,特别优越,最大电流都是几十A,最大电压几百V,但是实际用来,其实比数据手册上的标称值差远了。很困惑,百度上这个答案很好,贴出来分享下:
呵呵,首先要肯定你看得确实比较仔细。我来回答一下吧:这份文件是生产商制作的,当然里面的数据也是真实的,不过问题是,他们的实验条件是保密的。从我和我同事的研究感觉,这个参数是在极其优越的条件下完成的,测出的60A这种也是最乐观条件下的参数(至于为什么这么做,就更简单了,你肯定听说过广告吧,任何一个广告总是宣传自己最有优势的方面,至于其他数据就不可透露了),估计要在恒温,强力散热的条件下实现。现实中,这个条件一般人员根本不可能做到,这也就意味着这些参数我们只能参考,有无经验的工程师差别在于分析这些参数的可信度,也就是在现有的条件下,大概能做到标示参数的几分之一或者十几分之一,二十几分之一。一般来说,以常规散热条件(足够大的散热片+必要的风扇),能做到1/10就很不错了。追问 我有一个同步整流的设计要在50A的电流下持续工作,即使有散热片+风扇,因为有热阻的存在,我担心在大电流下,因为管脚发热,且热量不会与散热片
...
MOS管驱动电路由于MOSFET的结电容 密勒效应,导致它的开通和关断过程并不是直接完成的,百度密勒效应可以查到。为了给G极结电容快速充电,就要求G级电流尽可能大,经过验证,使用推挽输出电路,可以很好地减少MOSFET开通和关断所用的时间,是驱动MOSFET十分不错 的选择。MOS管的G极相当于一个电容,接高电平的时候有个充电过程,充电让G极达到完全导通电压后,MOS管完全导通。
普通电路驱动MOSFET:
即将更新配图 MOSFET驱动电路与PWM功率控制 - fine_young - fine_young的博客当PWM信号是高电平时,Q3导通,MOS管G极接地,没有电压,MOS关断。这时候,电阻R18/R39不能取的太小,否则通过Q3的电流太大会烧坏三极管。当pwm信号低电平的时候,Q3不导通,MOS管G极接12V,MOS管开通。这时候又希望R18尽量小,让G极充电电流尽量大,从而保证MOS管快速开通。
推挽电路驱动MOSFET:
即将更新配图 MOSFET驱动电路与PWM功率控制 - fine_young - fine_young的博客PWM信号高电平,Q7导通,Q1关断,
...