72MHZ的主频越高越好吗跑UCOSIII效果好吗

他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)讨论:ucosii和嵌入式linux的比较?
[问题点数:79分,结帖人freedomzlp]
讨论:ucosii和嵌入式linux的比较?
[问题点数:79分,结帖人freedomzlp]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
匿名用户不能发表回复!|移植ucosII到STM32F103ZE(一)
> 移植ucosII到STM32F103ZE(一)
移植ucosII到STM32F103ZE(一)
一、开发环境:1. 开发环境: keil uvision4 MDK4.12(windows XP)MDK即RealView MDK(Microcontroller Development kit),是 ARM 公司目前最新推出的针对各种嵌入式处理器的软件开发工具。RealViewMDK集成了业内最领先的技术,包括 uVision4 集成开发环境与 RealView 编译器。支持 ARM7、ARM9 和最新的 Cortex-M3/M1/M0 核处理器,自动配置启动代码,集成 Flash 烧写模块,强大的 Simulation 设备模拟,性能分析等功能,与 ARM 之前的工具包 ADS 等相比,RealView 编译器的最新版本可将性能改善超过 20%。RealView MDK的突出特性:菜鸟的阿拉伯飞毯&& 启动代码生成向导,自动引导,一日千里启动代码和系统硬件结合紧密,必须用汇编语言编写,因而成为许多工程师难以跨越多门槛。RealView MDK的&Vision3工具可以帮您自动生成完善的启动代码,并提供图形化的窗口,随您轻松修改。无论对于初学者还是有经验的开发工程师,都能大大节省时间,提高开发效率。高手的无剑胜有剑 && 软件模拟器,完全脱离硬件的软件开发过程RealView MDK的设备模拟器可以仿真整个目标硬件,包括快速指令集仿真、外部信号和I/O仿真、中断过程仿真、片内所有外围设备仿真等。开发工程师在无硬件的情况下即可开始软件开发和调试,使软硬件开发同步进行,大大缩短开发周期。而一般的ARM开发工具仅提供指令集模拟器,只能支持ARM内核模拟调试。专家的哈雷望远镜 && 性能分析器,看得更远、看得更细、看得更清RealView MDK的性能分析器好比哈雷望远镜,让您看得更远和更准,它辅助您查看代码覆盖情况,程序运行时间,函数调用次数等高端控制功能,指导您轻松的进行代码优化,成为嵌入式开发高手。通常这些功能只有价值数千美元的昂贵的Trace工具才能提供。业界最优秀的编译器&&RealView 编译器,代码更小,性能更高。2. 处理器: STM32F103ZET6(神舟III号板)3. OS版本: uC/OS-II V2.864. 外设库版本:STM32F10x_StdPeriph_Lib_V3.5.05. 源码下载:1) 从st公司网站下载最新版本的stm32标准外设库,版本是V3.5.0()http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32f10x_stdperiph_lib.zip2) 下载uC/OS-II V2.86:先去micrium网址注册账号http://micrium.com/page/home然后登陆并下载http://micrium.com/newmicrium/uploads/file/appnotes/secure/Micrium-ST-uCOS-II-LCD-STM32.exe二、 硬件资源介绍:1. 简介:STM32F103ZET6是STM32F103系列最高端配置芯片,cortex-M3内核的32位处理器(内部数据路径,寄存器,存储器都是32位),采用哈佛结构,72M主频,LQFP144封装,片上有512K的flash和64K的SRAM。STM32家族主要产品系列家谱2. 指令系统:Cortex-M3只是用32位的thumb2指令。在支持了16位和32位的thumb-2指令集支持,cortex-M3无需把状态在thumb和ARM之间来回的去换,尤其在使用大型条件嵌套以及执行复杂运算的时候,cortex-M3要比老一辈的ARM7执行效率要高很多。3. 寄存器组:Cortex-M3处理器拥有R0-R15的寄存器组,其中R13作为堆栈指针SP。SP有两个,但在同一时刻只能有一个可以看到。这也就是所谓的&banked&寄存器。R0-R12 都是32 位通用寄存器,用于数据操作。但是注意:绝大多数16 位Thumb 指令只能访问R0-R7,而32 位Thumb-2 指令可以访问所有寄存器。Cortex-M3 拥有两个堆栈指针,然而它们是banked,因此任一时刻只能使用其中的一个。主堆栈指针(MSP):复位后缺省使用的堆栈指针,用于操作系统内核以及异常处理例程(包括中断服务例程)进程堆栈指针(PSP):由用户的应用程序代码使用。堆栈指针的最低两位永远是0,这意味着堆栈总是4 字节对齐的。寄存器及其功能:xPSR 记录ALU 标志(0 标志,进位标志,负数标志,溢出标志),执行状态,以及当前服务的中断号PRIMASK 除能所有的中断&&当然了,不可屏蔽中断(NMI)才不甩它呢。FAULTMASK 除能所有的fault&&NMI 依然不受影响,而且被除能的faults 会&上访&,BASEPRI 除能所有优先级不高于某个具体数值的中断。CONTROL 中断屏蔽寄存器组,有两个作用:a、定义特权级别;b、选择当前使用哪个堆栈指针。4. 操作模式和特权极别:Cortex-M3处理器制程两种处理器模式和两种特权操作。两种模式分别是处理者模式(handler mode)和线程模式(thread mode),主要是用于区别普通应用程序的代码和异常服务例程的代码(包括中断服务例程的代码)。两种特权分级是特权级和用户级,用于提供一种存储访问的保护机制,使得普通的用户程序代码不能意外地或者恶意地执行涉及到要害的操作。ucosii不区分特权级和用户级,程序始终工作在特权级,因此两个堆栈指针的切换是全自动的,就在出入异常服务例程时由硬件处理。5. 存储器映射:CM3的存储系统与传统ARM架构的相比,有过脱胎换股般的改革:第一,它的存储器映射是预定义的,并且还规定好了哪个位置使用哪条总线。第二,CM3 的存储器系统支持所谓的&位带&(bit-band)操作。通过它,实现了对单一比特的原子操作。位带操作仅适用于一些特殊的存储器区域中。http://blog.sina.com.cn/s/blog_abd39cc70101ci44.html第三,CM3 的存储器系统支持非对齐访问和互斥访问。这两个特性是直到了ARMv7-M 时才出来的。最后,CM3 的存储器系统支持both小端配置和大端配置。CM3 只有一个单一固定的存储器映射。这一点极大地方便了软件在各种CM3 单片机间的移植。存储空间的一些位置用于调试组件等私有外设,这个地址段被称为&私有外设区&。私有外设区的组件包括:1) 闪存地址重载及断点单元(FPB)2) 数据观察点单元(DWT)3) 仪器化跟踪宏单元(ITM)4) 嵌入式跟踪宏单元(ETM)5) 跟踪端口接口单元(TPIU)? ROM表CM3 的地址空间是4GB, 程序可以在代码区,内部SRAM 区以及外部RAM 区中执行。但是因为指令总线与数据总线是分开的,最理想的是把程序放到代码区,从而使取指和数据访问各自使用自己的总线,并行不悖。Cortex-M3 预定义的存储器映射CM3在定义了存储器映射之外,还为存储器的访问规定了4种属性,分别是:? 可否缓冲(Bufferable)? 可否缓存(Cacheable)? 可否执行(Executable)? 可否共享(Sharable)
分享给小伙伴们:
我来说两句……
最新技术贴
微信公众号二
微信公众号一系统在启动时调用BSP_Init();该函数会初始化系统的各部分时钟。
void &BSP_Init (void)
BSP_RCC_Configuration();//初始化系统时钟
& & BSP_LED_Init(); & & & & & & & & & & & & & & & & & & & & & & /* Initialize the I/Os for the LED & & &controls. & & & */
所以分析BSP_RCC_Configuration()函数如下:
static void BSP_RCC_Configuration(void)
ErrorStatus HSEStartUpS
RCC_DeInit();//复位RCC模块的寄存器,复位成缺省值
RCC_HSEConfig(RCC_HSE_ON);//开启 External High Speed oscillator (HSE)时钟,用HSE的时钟作为PLL的时钟源&
HSEStartUpStatus=RCC_WaitForHSEStartUp();//获取HSE启动状态
if(HSEStartUpStatus==SUCCESS)//如果HSE启动成功
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
FLASH_SetLatency(FLASH_Latency_2);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);//配置PLL倍频源为HSE,不分频,倍频倍数为9,所以系统时钟8M*9=72M
RCC_PLLCmd(ENABLE); //启动PLL&
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//配置系统时钟
//while(RCC_GetSYSCLKSource()!=0x80);
while(RCC_GetSYSCLKSource() != 0x08);//检查是否将HSE 9倍频后作为系统时钟
RCC_ClockSecuritySystemCmd(ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
这样完成了系统72M时钟的配置,然后根据时钟树如下
可知系统时钟,SYSCLK可由三个设备提供,分别为高速内部时钟HSI,PLLCLK,HSE(外部晶振),PCLK1该函数RCC_PCLK1Config(RCC_HCLK_Div2);可知将其配置为了系统时钟2分频,即36MHz。那么挂接在PCLK1上的设备的时钟就是36MHz。
由寄存器应该可知系统那些外设挂接在APB1上,例如我们要对CAN进行初始化,则已经知道APB1的外设36MHz,则如果设置如下
& CAN_InitStructure.CAN_SJW=CAN_SJW_1
& //BTR-SJW 重新同步跳跃宽度 1个时间单元
& CAN_InitStructure.CAN_BS1=CAN_BS1_2 & //BTR-TS1 时间段1 占用了2个时间单元
& CAN_InitStructure.CAN_BS2=CAN_BS2_3 & //BTR-TS1 时间段2 占用了3个时间单元
& CAN_InitStructure.CAN_Prescaler =6;
&定义了时间单元的时间长度 36/(1+2+3)/6=1Mbps,即为CAN的通信波特率。
阅读(...) 评论()

我要回帖

更多关于 cpu主频越高越好吗 的文章

 

随机推荐