Hello world今天是2015年9月2日,我自己搭建的博客出生了,以程序员的方式,向世界打招呼: Hello world。我会慢慢地把之前网易博客里写过的技术文章整理发布到这里来。持续更新接触到的新事物。
Hello World,你会看到我把某个自己解决的难题,一步一步讲个明白;会看到我用心读一本好书,记录点滴感悟;会看到我偶尔告诉你我的梦想和计划,再或者有时会发一发小牢骚;
我会朝着自己的理想不停成长,待有一天,羽翼丰满,展翅翱翔,再回首时希望能笑着感谢此时的自己:“谢谢你,没有辜负未来”。
描述刚接触FreeRTOS的时候,就对串口在FreeRTOS下如何应用的问题比较困惑,现在完成了一个小项目,也有点心得,在这里记录一下使用方式,方便日后参考:
代码串口中断:1234567891011121314151617181920212223242526272829303132333435363738void USART1_IRQHandler(void) //User debug{ portBASE_TYPE usart1_Que_Woken=pdFALSE; if(USART_GetITStatus(USART1,USART_IT_TXE)!=RESET) { //USART_ClearITPendingBit(USART1,USART_IT_TXE); if( xQueueReceiveFromISR( L0_TxQue, &DTS, &usart1_Que_Woken ) == pdTRUE ) { /* A character was retrieved from the queue so can be s
...
到现在工作了一年多,硬件上基本的模拟电路,数字电路懂,也画过4层的PCB。软件上,常见MCU的固件基本都能写,正在研究stm32f4系列配合一些嵌入式系统,GUI,等高级一点的应用。
今年GCT过了以后,就开始考虑接外包,搬家以后自己制备点东西,成立自己的小工作室,一方面在公司把固件这块都做熟了,研究好GUI,UCOS,等,再搞搞USB,无线。另一方面跟公司做上位机软件的小伙伴把C++也做到可以写一般软件的地步,再入门LINUX。
下班后,就忙在自己的工作室里,寻找外包项目做。想想都觉得只要GCT过了,生活就会很美好的样子。
(现在搬家博客中,距离这篇日志已经1年多了,我的确通过利用下班时间努力看书,成功进入复旦大学计算机系读工程硕士,也按照计划,接了一个蓝牙盾的外包,虽然经历了那么多难题,跟合作方相处很愉快,项目也到了尾声,收获了很多。
然而,我并没有觉得生活像当初写这篇日志想象的那样美好。我给自己的目标变了,我看到自己没钱买房子,看到父母舍不得买贵一点的衣服,我总是想要得到更好的东西,有更大的成就;
我真的不知道这样是好是坏,好的方面来讲,正是因为不满足现状会让我更加努力,更有动
...
要用STM32F429+SDRAM的方式驱动一块7寸工业LCD屏,移植UCGUI图形界面库来做界面开发
按照官方说明,做了所有的移植步骤,但是屏幕仍旧什么也不显示,所有操作无用,后来看了这篇帖子,帮助很大;
http://bbs.armfly.com/read.php?tid=4550&ds=1&page=e#a
我的主要问题在于:
关于层的问题。因为默认是1层的。如果要改为2层的。特别注意要先选定层1。要不然什么都不显示。 GUI_SelectLayer(1); 根据DATASHEET.层2是在最上面的。它的尺寸如果和屏幕一样的。 那层1和背景都会被它覆盖。这里说的是LTDC的层。 所以要选择层2绘制。(GUI里面 0- 层1 ,1- 层2)。
没有选择第二层,那么所有操作都在默认的第1层,第二层覆盖在他上面,那么所有的操作都不会有用啊。
首先,
Micro AB,ID线悬空,有公母,仅OTG设备使用
Micro A ID线接地只有公
Micro B ID线悬空 有公母
比如我的中兴U950手机支持OTG功能
我的手机电脑连接线,确实是 Micro B公转标准A公 ,id线不连GND 这样手机线插在电脑上,手机检测ID还是悬空的,手机就知道自己是Device
我手上的OTG线,其实是MicroA公转标准A母,id线连接GND 这样手机连接U盘后,检测到ID位低,就开始OTG的HNP对话确定自己是主机
但是线上面的标注不一定是指型号,比如我这个MicroA的转接线接头上有一个B字。现在淘宝上的东西应该是没有明确区分Micro A,B所以搜不出来。
项目上要用到OTG功能,使我的设备可以读取U盘文件,同时也可以插在PC上当做一个外设来使用那么就跟手机一样,插电脑的线用普通的手机电脑连接线 MicroB 公转标准A公插U盘的线用手机OTG线,也就是MicroA 公转标准A母
一开始搜MicroA的插头,转接线等等,淘宝,百度都搜不到,资料上也说的不清不楚,到底ID线和主从机的关系如何确
...
描述公司要做USB KEY相关的东西,上位机软件需要读取U盘的 VID,PID,Serial number。之前在网上下载了一个VC++6.0做的 控制台程序源码,测试可行,自己改动之后,做出了一个小程序,问题是,这个程序在某些电脑上无法正常读出U盘信息,在某些电脑上却可以。可能是VC++6.0 对WIN7 的兼容性不太好。于是决定转战VS2010+WDK,做一些简单的USB驱动的东西。MSDN的USB VIEW源码是很不错的参考资料。
## 环境搭建
首先VS2010安装,WDK安装,按照步骤进行,之后打开USB view工程(CSDN上下载来的VS2010版本),编译之后,一步一步出现了很多问题,下面逐个解决:
error RC2247 : SYMBOL name too long:
你好,我在2010里面也遇到了error RC2247 : SYMBOL name too long ,我是这么解决的把#define APSTUDIO_HIDDEN_SYMBOLS,,复制到C:/Program Files/Microsoft SDKs/Windows/v7.0A/Inclu
...
这周做stm32f207的ADC时,发现ADC采集到的原始数据可以超过4096,有的已经65000了。stm32的ADC只有12位,最大4095,怎么可能超过4096呢。肯定是数据错位的问题了,我在ADC的初始化程序中,设定其数据对齐模式为右对齐,应该没问题的啊,百思得得其解,开始仿真,发现,ADC_InitStructure中的某些数完全是错误的,我仿真观察变量ADC_InitStructure.ExternalTrigconv ,一建立结构体,这个成员的值就变成了0x08007A47,最后赋值给CR2的时候,第11位也就是数据对其位 就是1 了,左对齐。。。为什么会这样呢,我特意在初始化中将ADC_InitStructure.ExternalTrigconv=ExternalTrigconv_none.也就是将他赋值为0,然而即使程序已经执行过这条语句,这个成员变量的值仍然是0x08007A47,太奇怪了,可能是固件库的bug,08007A47看起来倒像是flash地址了。
忽然想起有一个ADC_DInit()和Structure_Init(),这两个函数能将ADC配置为RESET
...
简述公司让改一个PIC16F589的固件,增加一些功能模式的选择等,难的不在于怎么改这些东西,这些东西只要读读程序,理解下原来的构架思路,很容易写出来。难的地方在编译器和开发环境。之前也搞过PIC18F4520的事情,对PIC单片机编译环境的复杂难用深有感触。现在要搞这个PIC16F的单片机,配置环境花了一天时间,主要是一开始给我的源程序就是错误的版本,后来找到问题所在,拿到了正确的源程序,又下载到了2个月试用期的HI tech PICC编译器pro版本,才能够基本上编译。编译器版本是:
MAPLAB IDE v8.86 and the compiler is :HI-TECH C Compiler for PIC10/12/16 MCUs (PRO Mode) V9.81
Copyright (C) 2010 Microchip Technology Inc.
Licensed for evaluation purposes only.
This license will expire on Thu, 31 Jul 2014.
可能由于版本原因出现了一些编译错误,记录如下:
...
一些函数调用的细节问题:调用前
一个函数的运行期间调用另一个函数时,在运行被调用函数之前,系统需要完成3件事情:
将所有的实参、返回地址等信息传递给被调用函数保存;
为被调用函数的局部变量分配存储区;
将控制转移到被调函数的入口。调用中
而从被调用函数返回调用函数之前,系统也应完成3件工作:
保存被调函数的计算结果;
释放被调函数的数据区;
依照被调函数保存的返回地址将控制转移到调用函数。当有多个函数构成嵌套调用时,按照后调用先返回的原则。
也就是说,在调用一个函数之前,都会为被调用函数的局部变量分配存储区。看一下FATFS文件系统中如何做一个能扫两级文件夹的文件扫描。源代码如下:1234567891011121314151617181920212223242526272829303132333435363738394041424344u8 mf_scan_files(char * path,u8 recu_level){ u8 res;FILINFO fileinfo; DIR dir; char *fn; /* This function is ass
...
半个月前开始搞USB HOST读U盘的固件,一开始也是什么都不懂,只是以前搞过cypress的USB芯片CY7C68013A,对USB协议有一点基础。
为了搞好USB,首先阅读了圈圈的《圈圈教你玩USB》 这本书,书写的很详细,跟着他的思路走,能把USB协议的各个部分都接触到,即使硬件条件不同,但他的固件是自己一步一步写出来的,对USB的通信过程理解有很大帮助。
然后就是熟悉stm32的USB 固件库,首先用DEVICE库的例子,自己修改,由于当时只有stm32f103的硬件条件,做了一个使用内部FLASH空间的256K小U盘,这样对USB device的固件结构有了大概了解。
之后,了解FATFS的内容,将FATFS移植到stm32f103上,目的就是管理着256KB的FLASH空间,这样结合USB device的固件,就可以通过电脑修改文件,然后通过串口发送命令,使用FATFS读或者写文件,观察效果。这样就熟悉了FATFS文件系统的使用和移植注意事项。
再下来就是官方的OTG_FS库了,这个库适用于包含OTG模块的f105,107和f2xx系列,这个库有一个说明文档pdf,
...