stm入门

合集下载

STM32f103C8T6入门学习记录

STM32f103C8T6入门学习记录
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
设置输出为推挽输出。它有8中工作模式,输出只有两种推挽和开漏输出。其它可以参
考相关手册
GPIO_Init(GPIOB , &GPIO_InitStructure);
这一句就是将前面四句的设置初始化到GPIOB中;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
保存工程名,选择Obj文件夹,文件名为first_project,不用加后缀格式,系统默认。
接下来会弹出让你选择器件的窗口,这里我们选择STmicroelectronics的STM32F103C8
最后会弹出是否复制启动代码的对话框,选择YES;
3
1、在project窗口右键点击Tagert 1选择manage conponents或者 找到倒数第二个品字形图标;
delay();
GPIO_SetBits(GPIOB,GPIO_Pin_6 );//点亮PB.6
delay();
GPIO_ResetBits(GPIOB,GPIO_Pin_6 );//熄灭PB.6
delay();
}
}
2
GPIO_InitTypeDef GPIO_InitStructure;
定义一个结构变量GPIO_InitStructure,结构体类型为GPIO_InitTypeDef,相当于int

芯达STM32入门系列教程之五《如何安装RealView MDK软件》

芯达STM32入门系列教程之五《如何安装RealView MDK软件》

STM32入门系列教程如何安装RealView MDK软件Revision0.01(2010-04-16)考虑到大多数同学都是从单片机过渡到STM32,因此我们将采用MDK作为我们STM32的调试软件。

该软件的界面为KEIL界面,对很多熟悉51的朋友来说,绝对能够轻松上手。

本期教程将讲述如何安装MDK软件。

打开芯达STM32光盘,在“软件工具”目录下,即可看见:双击打开后,可找到MDK3.80a版本。

可能有同学会有疑问,现在最新版本已经都到MDK4.11了,为啥还用3.80版本呢?经过高手前辈的经验确认,发现兼容性最好的,还是MDK3.80a,因此本期教程采用该版本来讲解,以后所有的教程、例程均采用MDK3.80A,不再重复说明。

如下右图所示,双击它。

出现如下窗口,直接点击“Next”进入下一步。

在出现的窗口中,选中I agree to all…,再点击Next,进入下一步。

接着选择你要安装的目录,笔者在这里直接默认安装在C盘下的keil目录中,然后点击Next。

下面填写你的姓(First Name)和电子邮件地址。

填写英文名字,以及电子邮件地址。

然后点击Next进入下一步。

接着系统进入安装界面,这个过程根据电脑配置的不同,可能需要几十秒至几分钟不等的时间,请耐心等待。

安装完成后,进入如下界面:这时,要选择一个工程例程,笔者这里选择了CQ-STM32的目标板的例程。

实际上,这一步不是必要的,大家也可以选择其他例程,例程供参考而已。

然后点击“Finish”,即可安装完成。

现在回到桌面,就可以看到多了一个图标:因为我们刚才安装的是MDK3.80a版本,属于Keil uVision3,因此图标上显示Keil uVision3的字样。

如果安装的是MDK4.11版本,则图标下显示的是Keil uVision4。

OK,软件安装完毕,这就表明我们安装成功了吗?NO!我们还需要激活它。

笔者建议使用正版软件,合法获取授权文件及序列号。

STM32++定时器与+PWM+快速使用入门

STM32++定时器与+PWM+快速使用入门

STM32 定时器与 PWM 快速使用入门要求:在万利的开发板 EK-STM32F 上产生周期为1秒,占空比分别为 50% 10%的 PWM 并且点亮板上的 LD1,LD2 灯闪烁。

做法很简单。

STM32的PWM是由定时器来产生的。

可以看出。

定时器3的通道1至4在GPIO端口的映像。

如果是完全映射。

各通道的连接引脚如下:CH1=PC6, CH2=PC7, CH3=PC8, CH4=PC9这样,刚好与板上的LD1,LD2灯符合,因为LD1连接到PC7,LD2连接到PC6引脚。

关于PWM一些知识.STM32的TIMx 是 TIMx_ARR 寄存器确定频率(周期)、由TIMx_CCRx 寄存器确定占空比的信号。

使用定时器3。

而TIM2、3、4的时钟源是 APB1 即是 PCLK1 ( APB1 对应 PCLK1 )PCLK1 = APB1 = HCLK/2 = SYSCLK/2 = 36MHZ (36,000,000 HZ)但是注意:倍频器会自动倍2,即是【72MHZ】!代码如下:voidSTM32_PWM_GPIO_Configuration(void){// 11:完全映像STM32_Afio_Regs-&gtmapr.bit.TIM3_REMAP=3;// LD1 =P7 LD2=PC6/*GPIOA Configuration: ( PC6 PC7 ) TIM3 channel 1 and 2 as alternate function push -pull */STM32_Gpioc_Regs-&F6=Output_Af_push_pull; // PC.06 复用功能推挽输出模式STM32_Gpioc_Regs-&gtcrl.bit.MODE6=Output_Mode_50mhz; // PC.06 输出模式,最大速度50MHzSTM32_Gpioc_Regs-&F7=Output_Af_push_pull; // PC.07 复用功能推挽输出模式STM32_Gpioc_Regs-&gtcrl.bit.MODE7=Output_Mode_50mhz; // PC.07 输出模式,最大速度50MHz}//end subvoidSTM32_TIM3_Configuration(void){// TIM_DeInit( TIM3);//复位TIM3定时器STM32_Rcc_Regs-&gtapb1rstr.all |= RCC_TIM3RST;STM32_Rcc_Regs-&gtapb1rstr.all &= ~RCC_TIM3RST;//时钟使能STM32_Rcc_Regs-&gtapb1enr.all |=RCC_TIM3EN;/* TIM3 base configuration *///TIM_TimeBaseStructure.TIM_Period = 9999;//TIM_TimeBaseStructure.TIM_Prescaler = 7200;//TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;//TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);STM32_Tim3_Regs-&gtarr.all=9999; // 定时周期,PWM频率! 10毫秒*100=1秒STM32_Tim3_Regs-&gtpsc.all=720; // 7200分频 72MHZ/72,00 72,000,000/72,00=10,000STM32_Tim3_Regs-&gtcr1.bit.CKD=0; // 时钟分频因子STM32_Tim3_Regs-&gtcr1.bit.DIR=0; // 0:计数器向上计数/* Clear TIM3 update pending flag[清除TIM3溢出中断标志] *///TIM_ClearFlag(TIM3, TIM_FLAG_Update);STM32_Tim3_Regs-&gtsr.bit.UIF=0; //更新中断标记由软件清0 ,例如当上溢或下溢时,软件对CNT重新初始化/* PWM1 Mode configuration: Channel1 Channel2 *///TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//TIM_OCInitStructure.TIM_Pulse = CCR1_Val;//TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//TIM_OC1Init(TIM3, &TIM_OCInitStructure);// timer3 的通道1 是 PC6 引脚, AFIO完全映射STM32_Tim3_Regs-&1P=0; // 输入/捕获1输出极性 0:OC1高电平有效 1:OC1低电平有效STM32_Tim3_Regs-&1E=1; // 输入/捕获1输出使能 1:开启- OC1信号输出到对应的输出引脚。

芯达STM32入门系列教程之十四《STM32的USB下载调试》

芯达STM32入门系列教程之十四《STM32的USB下载调试》

STM32入门系列教程STM32的USB下载调试Revision 0.01( 2010-08-12)ST官方实际上提供了两种下载方式:串口ISP与USB下载。

之前讲述了串口ISP的下载调试(类似单片机一样),还有一种就是USB方式。

通俗地说,我们可以使用USB接口来下载和调试程序。

熟悉USB的朋友马上反应过来,USB 和串口一样,都是串行传送数据。

是的,这两种方式下载,数据的传输方式都是串行,因此速度不可能太快。

事实上,真正的开发,不可能靠ISP来调试。

都是使用JLINK + MDK或者IAR来调试的。

有条件的同学可以购买jlink仿真器。

说了很多闲话,下面开始进入正题。

要进行USB下载,我们需要事先准备的工作如下:1、DfuSe安装软件2、USB下载固件(hex文件)以上这两个均可在芯达stm32光盘中找到。

在光盘的软件工具目录下,可以找到DfuSe_Demo_V2.2.1_Setup.exe;该软件是为了进行USB下载提供一个操作的界面。

USB的固件HEX文件——STM32_USB.hex,可以在目录“芯达STM32出厂HEX文件”中找到。

1. Dfuse软件的安装安装的过程,建议大家不要看一下本教程的一个步骤,安装一下,再看一下教程,再安装。

如此效率比较低。

建议先把教程浏览一遍,人的瞬间记忆能力,在这里足够用了。

遇到没有印象的,再回过头来看教程。

OK,双击DfuSe_Demo_V2.2.1_Setup.exe图标,双击后,会进入如下界面:等待几秒钟,即可进入如下界面:点击下一步NEXT,进入下一界面:此时,选择是否接收协议授权等信息,可暂且不管,直接YES,进入下一界面:此界面最熟悉不过,一般软件都会有,直接Next,进入下一界面:这里需要做一个说明,笔者默认把该软件安装在C盘,如果你想安装在别的盘符,直接点击Browse…,跳出对话框选择即可。

建议默认放在C盘。

以防后续步骤出错。

然后Next。

《STM32入门100步》第4期:STM32内部重要功能(洋桃电子版)201712

《STM32入门100步》第4期:STM32内部重要功能(洋桃电子版)201712

STM32入门100步系列教学文章STM32内部重要功能全记录杜洋洋桃电子上一期我们讲了内核、存储器和时钟,它们都是单片机核心功能的一部分,没有它们中的任何一个,单片机都不能正常工作。

而核心功能还包括复位和电源管理两个部分,因为篇幅关系没有写完,这一期把它们补上。

同时我还要继续介绍单片机的多个重要功能。

之所以说“重要”,是因为单片机如果没有这些功能,虽然可以正常工作,但其性能和所发挥的作用会大大减弱。

重要功能包括:低功耗模式、ADC、DMA、I/O端口、调试模式、定时器、看门狗定时器和嘀嗒定时器。

因为我们现在是做入门的介绍,一开始不能讲得太深、太复杂,对于每个功能,我只介绍其表面上的功能与原理。

大家只要看过,有一个基本的印象即可。

待日后讲到编程设计时再深入讲解,你便会有温故知新的感觉。

【复位】复位功能是核心功能的一部分,大到PC,小到单片机,每一台计算机系统都有。

在我小时候,台式机的机箱上会有一个独立的复位按钮。

随着PC 越来越高级和稳定,复位按钮渐渐被取消了,但在主板上还是有复位电路的。

单片机上的复位功能也有着类似的变化,在我学习单片机时,需要在单片机的一个复位专用引脚上接一个由电阻和电容组成的复位电路。

如果没有这个电路,单片机就没法工作。

近些年来的新款单片机都把复位功能内置到单片机中,用户甚至可以忽略复位这件事了。

如果有必要,你可以在复位引脚上接一个按键用来手动复位,除此之外不需其他操作。

复位功能的作用是让RAM 中的数据清空,让所有连接到复位的相关功能都回到刚开始工作的(初始)状态。

在接通电源之前,单片机里的存储器及其他功能的状态是混乱、不稳定的。

如果上电后不复位,所有功能都处在无序状态,就好像军队集合时没有立正、稍息、向右看齐,直接齐步走的结果就是乱成一片。

复位的作用就是让单片机内部秩序化,都回到设计者规定好的状态。

这个状态为用户程序的运行做了充分的准备,就像计算机每次重启一样。

在STM32 单片机中,有一个供电监控器,这个监控器是一直工作的,它能监测外部电源的电压,当电压低于2V 时,监控器会让单片机复位。

芯达STM32入门系列教程之三《如何使用J-Flash调试》

芯达STM32入门系列教程之三《如何使用J-Flash调试》

STM32入门系列教程如何使用J-Flash调试Revision0.01(2010-04-12)对初学者来说,要进行STM32的程序下载调试,一般有三种方法:(1)使用SEGGER J-Flash(J-Link)下载程序到闪存中运行;(2)使用串口ISP来下载HEX文件到CPU中运行;(3)J-Link+MDK组合,来在线调试程序(可下载、调试)。

本文档讲述如何在芯达STM32开发板上使用SEGGER J-Flash下载HEX文件。

而其他两种方法,我们将在文档《如何使用MDK+J-Link调试》、以及《如何使用STM32-ISP下载调试》中详细说明。

先来解释SEGGER。

实际上,大家更为熟悉的ARM仿真器J-Link,就是由SEGGER公司开发的。

J-Link是SEGGER为支持仿真ARM内核芯片推出的JTAG 仿真器。

不管什么CPU的仿真器,都需要安装其相应的驱动后才能使用。

J-Link也不例外,它的驱动软件可以去官方网站:下载最新版本。

这里使用的驱动软件版本是V4.08l,该驱动的安装非常简单,请参考文档《如何安装J-Link驱动软件》。

安装完毕,会出现如下两个图标:现在开始我们的工作吧!步骤一先进行设备连接操作。

芯达STM开发板的JTAG口(开发板面朝上,最顶端有一个JTAG20pin的插口),与J-Link V8仿真器的输出排线连接,J-Link另一头的USB插口则插在电脑的USB口上。

这时,J-Link的指示灯开始闪烁,并保持“点亮”的状态。

注意:大家购买J-Link仿真器的时候,JTAG接口要求是标准的20pin的2.54间距的针座。

否则需要转接卡进行JTAG接口的转换。

步骤二进入PC的桌面,点击上图左边的图标:J-Flash ARM V4.081,出现如下界面:步骤三我们先来进行project设置,保存后会自动识别该配置。

不进行project设置,则在后续步骤进行连接connect开发板的时候,会提示找不到flash 设备下载,导致无法连接,如下所示:点击“Options”,再点击“Project settings”,如下图所示:步骤四在弹出的窗口中进行设置。

芯达STM32入门系列教程之六《如何使用MDK + J-Link调试》

STM32入门系列教程如何使用MDK+J-Link调试Revision0.01(2010-04-18)在芯达STM32入门系列教程之三《如何使用J-Flash调试》中,我们提到要进行STM32的程序调试,一般由三种方法:(1)使用SEGGER J-Flash(J-Link)下载程序到闪存中运行;(2)使用串口ISP来下载HEX文件到CPU中运行;(3)J-Link+MDK组合,来在线调试程序(可下载、调试)。

本期教程将讲述如何在芯达STM32开发板上使用J-Link+MDK组合进行调试及下载HEX文件。

MDK(Keil for ARM)的软件安装,请参考教程《如何安装RealView MDK软件》。

安装完并激活MDK后会出现如下图标:在双击启动MDK之前,我们需要进行设备的连接操作。

步骤一进行设备连接操作,此步骤与J-Flash下载时的操作是一样的。

将芯达STM开发板的JTAG口(开发板面朝上,最顶端有一个JTAG20pin的插口),与J-Link V8仿真器的输出排线连接,J-Link另一头的USB插口则插在电脑的USB口上。

这时,J-Link的指示灯开始闪烁,并保持“点亮”的状态。

注意1:大家购买J-Link仿真器的时候,JTAG接口要求是标准的20pin的2.54间距的针座。

否则需要转接卡进行JTAG接口的转换。

注意2:在红绿LED灯的附近的2个短路帽都应该插上,以保证BOOT1和BOOT0都是接地的,此时选中闪存存储器启动方式。

步骤二进入PC的桌面,点击上图左边的图标:Keil uVision3,进入如下MDK主界面,这时候编辑区内什么都没有。

打开一个工程文件,如下图所示:这里截取了一部分的图,点击“Project�Open Project”,打开一个对话框。

在芯达STM32光盘里,找到例程目录,随意找一个工程。

笔者这里选择了GPIO-LED例程。

点击“打开”后,MDK编辑区出现了代码窗口,左边的工程项目区出现了代码目录树。

MCBSTM32快速入门指南说明书

MCBSTM32Quick Start GuideThis Quick Start Guide introduces the MCBSTM32 boards for the STM32F10x family of devices from STMicroelectronics. It shows how to install the ARM software development tools and run a variety of example projects.T o install the evaluation version of the ARM RealView Microcontroller Development Kit (MDK)n Insert the CD-ROM into your PC. If the opening screen does not appear, run SETUP from the CD root directoryn Click Install Evaluation Software, then ARM Compiler(Eval T ools)n Follow the setup program instructionsThe SETUP program installs Keil m Vision and the ARM RealView compilation tools.Installing the SoftwareConnecting to your T argetUsing ULINK2Using ULINK-METhe target is powered via your PC, through its USB port. The Keil ULINK family of adapters connect the USB port of your PC to the JTAG port of your target board allowing you to download and debug embedded programs running on your target hardware.ULINK2 and ULINK-ME support standard JTAG and Real-Time Agent for on-the-fly target debugging.The ULINK2 Adapter connects to the MCBSTM32 using the20-pin ribbon cable.The ULINK-ME Adapter connects directly to the 20-pin JTAGconnector on the MCBSTM32.Blinky ExampleThis example demonstrates the ease of downloading and debugging an application on a target board.It can be found at:C:\Keil\ARM\Boards\Keil\MCBSTM32\Blinky T o use this examplenStartm Vision n Open the Blinky.uv2 project fileProject - Openn Compile and link the Blinky applicationProject - Buildn Program the application into on-chip Flash ROMFlash - Downloadn The LEDs on the target are controlled by the potentiometersetting. As the setting increases, the LEDs scroll faster.nStart debug modeUsing the debugger commands, you may:n Single step through code n Set breakpoints n Run the applicationn Review variables in the watch window n Reset the device to re-run the applicationnUse the yellow arrow (program counter) to view thecurrent assembler or C statement/mcbstm32Compile and download to Flash. n Start Debug mode.n Select the Serial Window and the Logic Analyzer. These values Application note 197 provides full information on Real-Time T race,/appnotes/docs/apnt_197.aspOpen the SD_File.uv2 project file and download to FlashProject - Open Flash - DownloadThe SD/MMC card can now be read or edited from the Debug USB - HID DemoThis USB example project implements a Human Interface Device (HID), and connects directly to your PC via the USB. No special USB drivers are required, since the HID support is already built Checking or unchecking the boxes in the Output (LEDs) groupturns the MCBSTM32 Board’s LEDs on and off.Inputs (Buttons) show the status of the on-board buttons。

Eclipse+Keil MDK 3.5 stm32开发入门

Eclipse + Keil MDK 3.5 STM32 软件模拟LED 跑马灯开发入门本人原来一直做JavaEE开发,最近想转到嵌入式开发,经过多方了解,先后了解了ARM7/9,最后选定从Cortex‐M3入手学习,目前市面上Cortex‐M3核的开发板大部分都是意法半导体STM32系列MCU,就以STM32来入门学习,也因为一直做JavaEE开发,对eclipse IDE 开发环境比较熟悉,并且用起来比较顺手,其基于eclipse的C/C++开发工具也很出色,其在后面陆续介绍。

之所以要eclipse+MDK是要用eclipse强大的C开发功能和Keil的调试功能各自的优点。

这也是最近学习所得。

1、开发环境搭建:其开发环境包括eclipse和MDK 开发环境,下面是具体软件的获取和安装方法:Java环境:eclipse是基于java的开发平台,首先系统要安装了Java虚拟机(JRE),到官网下载JRE:/javase/downloads/index.jsp,入图中下载即可,然后默认安装即可。

Eclipse IDE for C/C++ Developers:然后下载eclipse C/C++ IDE,地址是:/downloads/注意要下载windows版的。

只需要下载Eclipse IDE for C/C++ Developers (68 MB),该包已经集成了C/C++插件的,把下载的压缩包接压到任何目录即可,运行解压目录中的eclipse.exe,然后指定其工作区(WorkSpace)目录即可。

Windows下面GCC编译器:适用于Eclipse IDE for C/C++ Developers常用的GCC编译器有Cygwin和MinGW,这里使用Cygwin,以下下载地址:ftp://mcu123:mcu123@ftp:///upload_上传目录/freertos/cygwin_osdev_2009.iso.au/sourceforge/j/ji/jinix/cygwin_osdev_2009.iso或者/project/showfiles.php?group_id=201649&package_i d=277469&release_id=651579以上提供的Cygwin的其GCC版本都是最新版4.3.3,也可以下载其他的但大部分gcc都是3.4的,在本文的使用中其并无影响,这里只使用Eclipse IDE for C/C++ Developers开发功能和Keil的ARM编译器和调试功能。

芯达STM32入门系列教程之四《如何使用STM32-ISP下载调试》

STM32入门系列教程如何使用STM32-ISP下载调试Revision0.01(2010-04-15)1.STM32-ISP原理STM32系列CPU自带固化的ISP程序,在芯片上电的时候会检查BOOT0(pin_94)与BOOT1(pin_37)引脚的电平状态,如果BOOT0=1,且BOOT1=0,则会进入自带的ISP程序。

为什么要这样设计呢?先来看下其他系列的CPU如何在没有仿真器的情况下下载升级版本。

像单片机可以用STC-ISP软件从串口下载,但是对于STM32系列的CPU来说,在没有ARM仿真器的情况下,如何来调试STM32目标板?OK,STM32也提供了串口ISP下载的功能,并配备专门的官方ISP软件:Flash loader demostrator。

目前我们使用的是V2.0版本。

只要在电脑上安装好这个软件,并用串口连接目标板,即可通过串口把HEX文件下载到目标版中运行,非常方便。

2.如何使用ISP下载调试2.1安装Flash loaderFlash loader安装软件,请在芯达STM32光盘中的“软件工具”目录中,如下图标:双击该图标,出现如下图所示窗口:大约等待几秒钟,进入下一个界面:从这个界面可以看出,我们安装的是V2.0.0的版本。

接下去一路点击“Next”,安装非常简单,一直到最后“finish”。

相信您一定可以顺利安装完成。

我们还是把安装图解贴在这里,以备参考。

2.1使用ISP下载调试1、用串口线一头插在芯达STM32开发板的串口座上(使用COM1座),一头插在电脑串口上(若使用笔记本,请自备USB转串口)。

2、检查电源附近的短路帽是否已经把BOOT0拔掉,BOOT1插上(拔掉即为高电平1,插上就是低电平0。

我们要的状态是BOOT0=1,且BOOT1=0)。

3、给目标板上电。

4、打开ISP下载软件如下,在开始菜单�程序�STMicroelectronics�Flash Loader demostrator�Flash Loader Demo,点击打开该软件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

STM32嵌入式入门必看之文章-----介绍非常详细!(学习STM32的理由!!!!) 首先,如果你有幸看到这篇文章,千万不要试图在2个小时内阅读完,就算你2个小时阅读完,我相信你也不会理解里面讲解的精华之处,我相信,你应该将此文章,慢慢品尝,这绝对是一篇需要品尝2~3天,再结合自己过往的经验,加上自己的思考,我相信会对你不仅仅是技术能力,甚至包括整体的思维方式都会有一个非常大的提高。 结合这篇文章,再结合STM32神舟系列开发板一些学习,可能会更加加深对嵌入式概念的理解。 我写这篇文章的目的,是用本人20年的嵌入式经验呈现给大家一副完整的产品,项目开发蓝图,用本人多年经的历总结了一些教训无私的分享给各位,希望各位今后能站在本人的肩膀之上,少走弯路,多为公司,为个人多做贡献,那我的愿望就达到了,也同时希望能看到大家反馈和回复,留个脚印,留下你的见解和智慧,为后人乘凉打点基础,先在这谢谢各位了。 那么由此开始我们充满知识的旅程吧,最重要的一点,就是在一个产品或项目的开发过程中,如果没有明确的目标,那么成功将无从谈起,做任何事的第一步必须明确目标。 与日常生活中的大多数事务一样,设计一个嵌入式产品的过程也必须从确定目标开始,对生产的产品进行明确定义。对产品进行定义主要是对产品是什么和能有什么功能进行描述,其次是在我们的整个开发过程中,应该要撰写一些开发文档,大概的框架的如下: 1)产品需求文档:描述产品的特性 2)功能需求文档:描述产品必须具备的功能 3)工程说明文档:描述系统实现的方法和满足需求的手段 4)硬件说明文档:对有关硬件进行描述 5)软件或固件说明文档:描述特定处理器下设计微程序以及固件的方法 6)测试说明文档:描述必须测试的项目和验证系统正常运行的方法 回复 引用 查看 #1楼[楼主]2011-04-25 18:00 | STM32官方技术社区 1.需求定义

需求定义用来描述产品的基本功能,对于公司来说,需求一般由该公司的市场销售部门或该公司的主要客户来制定;而对小公司或爱好者(就像armjishu.com里的爱好者一样),技术人员可以自己负责定义需求,并撰写成文档;对于STM32神舟系列开发板来说,主要就是提供各种接口,为大家开发产品时提供借鉴! 通常需求定义是围绕以下几个因素而来: 1)系统的用途(定义需要系统实现的各种功能) 2)实际输入输出是何种方式实现的(为元器件的选型做参考) 3)系统是否需要操作界面(涉及软件层操作系统的选型) 其实对小型的嵌入式产品来说,定义需求是非常关键的,因为需求清楚了,就可以避免后续开发过程中出现的诸如随机存储器(RAM)容量不足或所选的CPU速度不能满足处理的需要等一系列问题。

---------------------------------------------------------------------------------------------------------- 下面举个简单的实际例子,供大家来参考:

系统描述:用于从化温泉的水泵换水系统(用STM32神舟III号开发板模拟实现) 电源输入:使用来自于变压器的9V~12V直流电 水泵功率:375W 1)使用单相交流电机,由机械电气进行控制 2)如果温泉池处于低水位,则输入开关闭合信号,以禁止水泵继续运行 3)用户可以自由设置水泵运行或关闭的时间长度 4)除了自动设置控制外,还需要提供一种人工装置来允许维护人员灵活控制水泵进行维修 5)水泵开启/关闭/人工干预的时间可以30分钟为单位,在30分钟到23小时的范围内进行调节 6)显示设备可以指示水泵的开关状态,剩余时间,以及水泵是否处于人工干预模式 7)具备监视低水位的功能,并显示在屏幕上

如果需要商用,那么除了上面给出的功能要求外,其设计文档中还要包括电磁干扰(EMI)和电磁兼容性(EMC)认证、安全认证以及使用环境(包括环境温度、湿度、盐雾腐蚀等)等方面的需求。

实际上,以上的需求确定之后,接下来就是要考虑选择一款合适的CPU来满足和实现系统的功能,那么我们就要将上述7点用户能够理解的需求转化成我们专业领域的需求,转化如下,大家可以参考一下:

a.处理或更新输入输出信号的速率究竟需要多快? 解释:目前嵌入式处理器的主频一般都在几十兆到几百兆不等,单片机的主频一般是几十兆,STM32神舟系列开发板的CPU都是72MHZ,有的ARM9,ARM11处理器可以到几百兆;我们主要看这个产品是否需要对大量数据进行处理,或是否需要对缓冲区进行频繁操作,是否有类似的占用CPU资料的工作要做,这就决定我们要选择一款合适的处理器来让该产品得到最佳的性能。

b.是否可使用单片集成电路(专用IC)或FPGA来完成数据处理? 解释:如果可以的话,就不一定要选择处理器来做,用这些专业芯片就能替代

c.系统是否有大量的用户输入输出操作(如对开关和显示设备进行频繁操作)? 解释:如果有的话,要在处理器选型的时候考虑这些因素,选择一款能够满足以上要求的CPU.

d.系统与其他外部设备之间需要使用何种接口? 解释:这也是需要评估处理器的一个关键问题,选择具备这些接口功能的处理器会方便于我们的电路设计以及软件编程

e.设计完成后是否有可能需要进行改动,或在设计过程中系统需求是否可能出现变化?我们的设计是否能适应系统需求的变化? 解释:要避免选择的处理器刚好满足当前要求,这样当以后事务要求逐渐提高,处理器性能如果还有一定空间的话,那么就可以重用目前的产品;第二个就是要选择不会即将停产的芯片,很多处理器用得很广乏,可以借鉴的资料也很多,但是很可能这款芯片已经在市场上流行很长时间了,芯片厂商已经推出更新换代的替代品了,如果你选择了这款芯片,很可能1,2年后就买不到这款处理器芯片了,导致不得不重新选择新的处理器,重新设计产品,这样的既耗费时间,金钱,更消耗人力,延误市场的战机。 www.armjishu.com ---------------------------------------------------------------------------------------------------------- 回复 引用 查看 #2楼[楼主]2011-04-25 18:10 | STM32官方技术社区 2.处理器的选择

2.1.需要使用的I/O管脚数量 多数处理器都是使用内存和外部管脚来控制输入输出设备的,通常处理器都会有内置ROM和RAM的,如果内置的内存就已经满足需要,那么处理器就可以节省产生引用外部存储器信号的引脚,这样处理器可为输入输出提供较多的设备管脚(某些处理器支持外部RAM或ROM的使用,但对外部存储器进行访问时,处理器一般需要占用8条到10条I/O管脚)。

还有,有些处理器带有专用的内部定时时钟,这类时钟也需要使用一个端口管脚来实现某些定时功能;某些处理器中还具有漏极输出和高电流输出能力,可以方便的直接驱动继电器或电磁铁线圈,而不再需要额外驱动硬件的支持。

当对处理器I/O管脚进行计数时,我们一定要把使用处理器内部功能(如串行接口和定时器等)时限制使用的某些管脚考虑在内。

2.2.需要使用的接口数量www.armjishu.com 嵌入式处理器的主要功能是与应用环境中的硬件进行交互操作,这不仅需要外部硬件对接口具有实时处理能力,而且还要求处理器必须以足够快的速度对接口数据进行有效处理。

举例来说,STM32神舟系列开发板的CPU是ST公司出品的一款工业级微处理器,它基于CORTEX M3的核心,处理主频可达72MHZ,同时处理器内部配置了USB、SPI、IIC等接口,像STM32神舟IV号的107处理器还支持Ethernet等输出接口,其目的是更方便的利用这些接口开发出嵌入式产品。

需要注意的是,由于许多处理器具有的局限性没有在处理器技术资料中给予足够的说明,因此一定要仔细阅读处理器的指标说明。例如,在阅读资料的过程中发现,该资料可能会说明其串行接口可以在最高波特率下工作,但仔细研究该处理器的指标数据时,可能会发现并非该串口接口的所有操作模式都可以在最大波特率下运行。

深入了解并明确接口要求的方法:可以自己动手编写一些程序来对接口进行实际测试,以确认某种处理器是否可以满足应用的要求;因为,确认某个处理器是否可以满足接口要求并非是一件简单的任务。

2.3.需要使用的内存容量 决定内存容量的大小是嵌入式产品设计过程中的一个基本步骤,如果对所需内存容量估计过高,那么我们就有可能会选择成本较高的解决方案;反之,如果低估了所需内存容量,就有可能因系统需要重新设计而导致项目不能按时完工。

a.RAM和ROM的区别:存储器分为随机存储器(RAM)和只读存储器(ROM)两种。其中ROM通常用来固化存储一些生产厂家写入的程序或数据,用于启动电脑和控制电脑的工作方式。而RAM则用来存取各种动态的输入输出数据、中间计算结果以及与外部存储器交换的数据和暂存数据。设备断电后,RAM中存储的数据就会丢失。

b.随即存储器(RAM)的选择:RAM容量的预测是比较直观的,我们只需把所有变量数目与所有内部缓冲区的容量以及先入先出(FIFO)队列长度和堆栈长度直接相加,就能得到所需RAM容量的总数。 如果所需内存容量超出这类处理器的寻址范围,那么只能通过增加外部RAM来满足需求;然而,增加外部RAM的同时将会占用一定数量的I/O管脚来对扩展内存进行寻址,这种扩展往往会影响到处理器来实现应用的初衷。 需要注意的一个问题是,某些微处理器限制RAM的使用,这种限制的目的是为了借用部分内存存储器作为内部寄存器组使用。除了以上因素外,所使用的开发语言也对所需RAM容量有一定的影响,某些效率较低的编译程序可能会占用大量宝贵的RAM空间。

c.只读存储器(ROM)的选择:系统所需ROM的大小应该是系统程序代码与所有基于ROM的数据表容量之和。预测所需ROM空间容量比较困难的部分是预测程序代码的长度,解决这类问题的方法只能是随着经验的逐步积累来提高预测精度。 然而,最重要的并不是精确计算程序的代码长度,而是要清楚地估算代码长度的上限。根据经验,如果80%的ROM空间被代码占用的话,那么就太拥挤了,除非能确保系统需求不会有任何变化,否则至少要为可能发生的变化保留足够的备用ROM空间。 在多数情况下,我们可以试着在ROM中写入一部分程序代码,以便观察代码占用空间的情况,对于带有内部ROM的微处理器系统来说,系统程序都只能占用有限的程序存储器空间。

d.经验之谈:ROM与RAM使用情况相类似,程序代码长度与所选用的开发语言有关。举例来说,使用汇编语言编制的程序要比使用C语言编制的程序占用少得多的空间。 对于追求低成本的小型系统来说,一般不提倡使用高级程序设计语言;这是因为虽然高级语言在使用、调试以及维护方面来的比较容易,但同时这类语言需要占用更多的内存空间和大量的处理器时钟周期。 如果开发语言选择不当,其后果可能是把一个简单、低成本的单片机系统变为一个需要使用配置若干兆字节RAM空间的64位嵌入式处理器系统。

相关文档
最新文档