摘要: 之前写的systick_config(loadvalue) 根据系统时钟为72Mhz来写的,如果system clock不是72MHz怎么办?重新写了一下,先获取,系统时钟频率。1 //参数为ms2 void Systick_Init(u16 ms)3 { 4 RCC_ClocksTypeDef RCC_Clocks;5 /* SystTick configuration: an interrupt every 1ms */6 RCC_GetClocksFreq(&RCC_Clocks);7 SysTick_Config(ms*RCC_Clocks.S... 阅读全文
posted @ 2013-06-18 14:02 wwjdwy 阅读(270) 评论(0) 推荐(0) 编辑
摘要: C语言的字节对齐及#pragma pack的使用C编译器的缺省字节对齐方式(自然对界)在缺省情况下,C编译器为每一个变量或是数据单元按其自然对界条件分配空间。在结构中,编译器为结构的每个成员按其自然对界(alignment)条件分配空间。各个成员按照它们被声明的顺序在内存中顺序存储(成员之间可能有插入的空字节),第一个成员的地址和整个结构的地址相同。C编译器缺省的结构成员自然对界条件为“N字节对齐”,N即该成员数据类型的长度。如int型成员的自然对界条件为4字节对齐,而double类型的结构成员的自然对界条件为8字节对齐。若该成员的起始偏移不位于该成员的“默认自然对界条件”上,则在前一个节面后 阅读全文
posted @ 2013-06-17 17:41 wwjdwy 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 声明:学习中从原子那拿来的结构体字节对齐在用sizeof运算符求算某结构体所占空间时,并不是简单地将结构体中所有元素各自占的空间相加,这里涉及到内存字节对齐的问题。从理论上讲,对于任何 变量的访问都可以从任何地址开始访问,但是事实上不是如此,实际上访问特定类型的变量只能在特定的地址访问,这就需要各个变量在空间上按一定的规则排列, 而不是简单地顺序排列,这就是内存对齐。内存对齐的原因:1)某些平台只能在特定的地址处访问特定类型的数据;2)提高存取数据的速度。比如有的平台每次都是从偶地址处读取数据,对于一个int型的变量,若从偶地址单元处存放,则只需一个读取周期即可读取该变量;但是若从奇地址单元处 阅读全文
posted @ 2013-06-17 17:17 wwjdwy 阅读(318) 评论(0) 推荐(0) 编辑
摘要: __I、 __O 、__IO是什么意思?这是ST库里面的宏定义,定义如下:#define __I volatile const /*!< defines 'read only' permissions */#define __O volatile /*!< defines 'write only' permissions */#define __IO volatile /*!< defines 'read / write' permissions */显然,这三个宏定义都是用来替换成 volatile 和 const 的,所以我 阅读全文
posted @ 2013-06-06 15:56 wwjdwy 阅读(535) 评论(0) 推荐(0) 编辑
摘要: - startup_stm32f10x_ld_vl.s: for STM32 Low density Value line devices- startup_stm32f10x_ld.s: for STM32 Low density devices- startup_stm32f10x_md_vl.s: for STM32 Medium density Value line devices- startup_stm32f10x_md.s: for STM32 Medium density devices- startup_stm32f10x_hd.s: for STM32 High densi 阅读全文
posted @ 2013-06-06 15:53 wwjdwy 阅读(826) 评论(0) 推荐(0) 编辑
摘要: 想使用闹钟唤醒功能使系统从待机下唤醒,遇到一个问题:使用闹钟唤醒就不能使用wakeup pin唤醒。二者只能取其一。此问题解决,画了个板子wakeup pin 接下拉电阻解决。写新代码时候遇到一个问题:设置闹钟中断开启之后不要关闭:PWR_BackupAccessCmd(DISABLE);如果只有设置秒中断的话可以有这句比较安全,可是后面还要设置闹钟步长,千万不能有,不然会死掉,死掉。1,首先屏蔽掉://PWR_WakeUpPinCmd(ENABLE); //使能唤醒管脚功能 我的程序在wakeup_config.c中实现. 屏蔽后wakeup pin无法使机器唤醒2,使能RTC闹钟中断:/* 阅读全文
posted @ 2013-06-05 16:48 wwjdwy 阅读(7077) 评论(0) 推荐(0) 编辑
摘要: 很悲催弄了三四天发现connectivity line和其他系列的USB底层库不一样!不过也是一个学习过程吧。先把图贴上修改endpoint需要在desc文件的CustomHID_ConfigDescriptor以及prop中的reset修改目前reportdescriptor还不会改,只能修改count,可以收发64字节,但是都有report ID(此处郁闷了一周)发现问题了,修改完desc.c中的CustomHID_ReportDescriptor 需要在desc.h中修改#define CUSTOMHID_SIZ_REPORT_DESC 39最终实现:STM32 USB HID PC 雙 阅读全文
posted @ 2013-05-22 11:02 wwjdwy 阅读(671) 评论(0) 推荐(0) 编辑
摘要: 1 STM32的启动根据参考手册RM0008中的图表:得知STM32的启动有三种模式,三种模式的选择在于芯片上的两个Boot引脚,如RM0008种描述:在系统复位之后的四个上升沿后索存BOOT引脚,从而决定启动方式;用户对BOOT引脚的设置决定了系统复位之后的启动模式。三个不同的启动区域有着不同的起始地址,STM32这样规定:注意的是:只有当从SRAM启动,只有一个单一的地址0x2000 0000可以访问;而其他两种启动方式除了从各自的地址访问,还可以从0x0000 0000地址访问。不同的启动方式,决定了程序在设计过程中的方法,因此必须确认好程序存放空间和系统启动模式。所以,通过设置BOOT 阅读全文
posted @ 2013-05-18 21:09 wwjdwy 阅读(1097) 评论(0) 推荐(2) 编辑
摘要: http://blog.sina.com.cn/s/blog_6a31d1060100ua9v.html1 STM32系统结构要想深刻理解STM32的存储器,需要首先知道STM32的系统结构。如Figure 1,是STM32系统结构框图。根据STM32 Reference manual (RM0008)中的描述,如图:可以得知STM32系统结构的组成,每一个模块更为详细的内容,请参考相关文档。RM0008文档中可以看出,STM32采用的是Cortex-M3内核,因此,有必要了解Cortex-M3的存储器结构。图中还可以看出,Cortex-M3是通过各个总线和Flash、SROM相连接的。2 S 阅读全文
posted @ 2013-05-18 20:48 wwjdwy 阅读(469) 评论(0) 推荐(0) 编辑
摘要: 更新:__initial_sp是堆栈指针,它就是FLASH的0x8000000地址前面4个字节(它根据堆栈大小,由编译器自动生成)0x8000004才是复位向量,所以需要在add+4这两天再看IAP实验,觉得很实用,最近在做一个小项目,日后也肯定需要升级的。原子的程序是写在STM32的内部Flash,内部SRAM。还可以把程序写到外部Flash或者SD卡来更新。目前做了第一步:从串口更新,移植的正点的代码。先将IAP bootload写入ROM起始地址,这里我的ROM总共256k,我分了一半给bootload,一半给app。注意设置地址问题。只更新了Flash app。用的流水灯实验。SD卡F 阅读全文
posted @ 2013-05-15 17:44 wwjdwy 阅读(3367) 评论(0) 推荐(1) 编辑