下载此文档

STM32开发入门教程.pdf


文档分类:IT计算机 | 页数:约60页 举报非法文档有奖
1/60
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/60 下载此文档
文档列表 文档介绍
该【STM32开发入门教程 】是由【小布er】上传分享,文档一共【60】页,该文档可以免费在线阅读,需要了解更多关于【STM32开发入门教程 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:.
百度文库-让每个人平等地提升自我
STM32开发入门教程
(一)开发环境建立及其应用
入门准备:
我们常用的STM32开发编译环境为Keil公司的MDK(MicrocontrollerDevelopmentKit)
和IAR公司的EWARM.
在这里我们提供了比较稳定的新版本编译软件下载:
限于篇幅,在我们的教程里面将先以MDK下的一个例子来介绍如何使用MDK进行嵌入
式应用开发.
MDK安装与配置:
基于MDK下的开发中基本的过程:
(1)创建工程;
(2)配置工程;
(3)用C/C++或者汇编语言编写源文件;
(4)编译目标应用程序
(5)修改源程序中的错误
(6)测试链接应用程序
----------------------------------------------------------------
(1)创建一个工程:
在uVision3主界面中选择"Project"->"NewuVisionProject"菜单项,打开一个标准对话
框选择好你电脑中的保存目录后,
名字叫"NewProject"的工程.
从设备库中选择目标芯片,我们的MINI-STM32开发板使用的是STM32F103V8T6,因此
选中STMicrocontroller下对应的芯片:
ARM32-bitCortex-M3Microcontroller,72MHz,64kBFlash,20kBSRAM,
PLL,EmbeddedInternalRC8MHzand32kHz,Real-TimeClock,
NestedInterruptController,PowerSavingModes,JTAGandSWD,
-bitTimerswithInputCapture,OutputCompareandPWM,
16-bit6-chAdvancedTimer,216-bitWatchdogTimers,SysTickTimer,
2SPI,2I2C,3USART,,,
212-bit16-chA/DConverter,FastI/OPorts
1:.
百度文库-让每个人平等地提升自我
2:.
百度文库-让每个人平等地提升自我
选择完芯片型号后会提示是否在目标工程中加入CPU的相关的启动代码,如下图所示.
启动代码是用来初始化目标设备的配置,完成运行的系统初始化工作,因此我们选择"是
",这会使系统的启动代码编写工作量大大减少.
----------------------------------------------------------------
(2)配置工程:
选择菜单中"Project"->"OptionforTarget"或者选择快捷菜单中的图标:
因为MINI-STM32开发板上使用的就是8M的晶振且是使用的片内的RAM和ROM因此
"taget"下我们都可以使用默认的配置;
在"Output"菜单下我们需要选中"CreatHexFile"来生成编译好的工程代码,此工程可以
通过仿真器或者串口ISP烧录进开发板中.
注:ISP烧录过程我们将在入门教程二中给大家介绍.
"Listing""User"菜单中我们保持默认即可.
"C/C++"菜单为我们常用的菜单,这里简单的介绍下他们的具体功能:
PreProcesserSymbols中的Define,Undefine菜单表示是工程的宏定义中的变量,我们
将在今后的教程中详细介绍这个功能.
3:.
百度文库-让每个人平等地提升自我
Optimization为优化选项,Level0为不优化,这种模式最适合调试,因为不会优化掉代
码,,最适合生产过程中下载
到芯片中的代码.
IncludePath为工程中的包含路径,.
"Asm"和"Link"将在今后的高级教程中介绍.
"Debug"为我们调试使用的配置选项,"UseSimulator"
手里的仿真器来选择配置环境.
如果你使用的是Ulink,那么就选择"UlinkCotexDebug",如果你选择的是JLINK,那么
就选择"CotexM3Jlink",如果你使用的是ST公司出的简易仿真器ST-Link,那么你
就选择"ST-LinkDebug".
注意:右边当中的选项"Runtomain{}"选项如果勾上就表示仿真时进入了就会进入到
main函数,如果没有选上就会进入初始地址,你需要自己打断点运行到你的主程序main
处.
4:.
百度文库-让每个人平等地提升自我

识别出你的仿真器的信息.
如下图为ULINK2的信息:
5:.
百度文库-让每个人平等地提升自我
对于SWJ选项为三线制调试,将在后面的高级教程中介绍.
右下方有两个选项:
"VerifyCodeDownload":表示下载后校验数据
"Downloadtoflash":表示当仿真的时候先将目标代码下载到Flash中.
Trace菜单为跟踪配置,可以实时的将一些变量使用曲线的形式实时表示出来,我们将在
今后的高级教程中介绍这一项功能.
注意:市面上目前的盗版Ulink2不支持这项功能,正版的支持,Jlink也不支持这项功
能.
"FlashDownload"菜单用来配置使用仿真器程序下载的配置选项,大家务必选择好和你
,这个选项请注意一下,如
果不正确将不能将你的代码下载到芯片中.
配置好"Debug"后,那么"Utilities"可以不用配置.
如果你使用的是仿真器仿真,在你已经正确得将目标板和仿真器建立了物理连接后,请选
择正确的仿真器进行配置.
6:.
百度文库-让每个人平等地提升自我
(二)ISP在线下载程序
ISP:insystemprogramming
简介:
ISP:用写入器将code烧入,不过,芯片可以在目标板上,不用取出来,在设计目标板的时
候就将接口设计在上面,所以叫"在系统编程",即不用脱离系统;
应用场合:1,ISP程序升级需要到现场解决,不过好一点的是不必拆机器了;
ISP的实现一般需要很少的外部电路辅助实现,通常可利用单片机的串行口接到计算机
的RS232口,通过专门设计的固件程序来编程内部存储器。
主要是指代芯片的烧写方式,以往写片子需要把片子拿下来,离开电路,用编程器烧,
换句话说,芯片不能不脱离应用系统进行写入。
ISP主要针对这个问题,使用JTAG或者串行口(MCU内部有BootLoader,通过指定的
方式激活之,它可以和PC或其它上位机通过串口联系,不用使单片机离开应用系统而更新
内部的程序/设置)进行程序的烧写操作。
因此,具有ISP功能的MCU可以不使用编程器进行编程。当然,实现ISP可能需要一
些硬件电路支持,具体的在数据手册中有说明。
一般具备ISP功能后,就不要编程器了,而是使用下载线进行编程工作。但是不是说
他们就一定不支持编程器了,具体型号具体分析。是否需要仿真器进行仿真和是否具备ISP
和IAP没有必然的联系。只不过具备了IAP功能,可以在MCU内写入监控程序,模拟一个仿
真器,当然,这个监控程序是要消耗资源的,和使用硬件的仿真器还有一定的差异。
-------------------------------------------------------------------
以上就是ISP的一些概念上的描述,现在通俗点说就是怎么利用工具把程序下载到芯片
当中去.
第一步:配置工程,:
我们打开第一个我们的教程例子,GPIO_Test这个例子工程.
先按照下面的步骤来配置一下工程:
7:.
百度文库-让每个人平等地提升自我
点击下图中的Option选项;
选中"Output"菜单下的"CreateHEXFile",并且在右边的"NameofExecutable"中
填写我们生成编译代码的文件名称.
配置完选项后,点击工程编译按钮,然后我们就可以在
\Example2-GPIO\GPIO_test\.
8:.
百度文库-让每个人平等地提升自我
第二步:准备串口物理连接和设置Boot跳线选择芯片启动类型
先需要准备一根串口延长线,一头为公头,一头为母头的串口连接线(非交叉线),和一台
有串口的电脑.(注意:如果您的电脑没有串口,请购买"USB转RS232"的硬件设备来扩
充你电脑的串口.)
将Mini-STM32的J1跳线帽跳至2,3两脚上选择芯片从内部的Boot区启动,上电后会
先进入ISP状态.
连接串口线至你的电脑上的串口
将USB延长线连接至你的电脑上给Mini-
源指示灯点亮后一切准备就绪.
第三步::
:()
,
选择好您连接至开发板使用的电脑上的串口,可以通过搜索串口菜单来自动搜索出你电脑
上的串口信息.
在左上方的"程序文件"选择你准备烧入芯片中的代码,就是前面我们生成的
.
然后在菜单选项栏上选择"STMISP"菜单,点击"读STM32器件信息"命令按钮.
我们会在右边的信息框中显示出连接成功的信息:
如图所示:
9:.
百度文库-让每个人平等地提升自我
选择上"校验"和"编程后运行"两个选项后点击"开始编程".
会报出程序成功烧入芯片的一些信息,如下:
------------------------------------------------------------------
DTR电平置高(+3-+12V),复位
RTS置高(+3-+12V),选择进入BootLoader
...延时100毫秒
DTR电平变低(-3--12V)释放复位
RTS维持高
开始连接...3,接收到:1F
在串口COM4连接成功***@115200bps,耗时343毫秒
芯片内BootLoader版本号:
芯片PID:00000410
芯片FLASH容量为128KB
芯片SRAM容量为65535KB(此信息仅供参考,新版本芯片已不包含此信息)
96位的芯片唯一序列号:33006C065839353235581943
读出的选项字节:
A55AFF00FF00FF00FF00FF00FF00FF00
全片擦除成功
第547毫秒,已准备好
共写入2KB,进度100%,耗时4343毫秒
成功从08000000开始运行
向您报告,命令执行完毕,一切正常
----------------------------------------------------------------
这个时候您可以看到您手中的Mini-STM32开发板上的两个红色LED有规律的轮流点亮,
说明程序已经成功的烧入芯片了.
10:.
百度文库-让每个人平等地提升自我
最后您在断电后将Mini-STM32上J1的跳线帽跳至1,2引脚上,重新上电后,程序就
可以正常运行了.
(三)系统时钟SysTick
(一)背景介绍
在传统的嵌入式系统软件按中通常实现Delay(N)函数的方法为:
for(i=0;i<=x;i++);
x---对应于对应于N毫秒的循环值
对于STM32系列微处理器来说,执行一条指令只有几十个ns,进行for循环时,要实现N
毫秒的x值非常大,而且由于系统频率的宽广,很难计算出延时N毫秒的精确值。针对
STM32微处理器,需要重新设计一个新的方法去实现该功能,以实现在程序中使用
Delay(N)。
(二)STM32SysTick介绍
Cortex-M3的内核中包含一个SysTick时钟。SysTick为一个24位递减计数器,SysTick
设定初值并使能后,每经过1个系统时钟周期,计数值就减1。计数到0时,SysTick计
数器自动重装初值并继续计数,同时内部的COUNTFLAG标志会置位,触发中断(如果中断
使能情况下)。
在STM32的应用中,使用Cortex-M3内核的SysTick作为定时时钟,设定每一毫秒产生
一次中断,在中断处理函数里对N减一,在Delay(N)函数中循环检测N是否为0,不为
0则进行循环等待;若为0则关闭SysTick时钟,退出函数。
注:全局变量TimingDelay,必须定义为volatile类型,延迟时间将不随系统时钟频
率改变。
11:.
百度文库-让每个人平等地提升自我
(三)STSysTick库文件
使用ST的函数库使用systick的方法
1、调用SysTick_CounterCmd()--失能SysTick计数器
2、调用SysTick_ITConfig()--失能SysTick中断
3、调用SysTick_CLKSourceConfig()--设置SysTick时钟源。
4、调用SysTick_SetReload()--设置SysTick重装载值。
5、调用SysTick_ITConfig()--使能SysTick中断
6、调用SysTick_CounterCmd()--开启SysTick计数器
(四)SystemTick工程实战
外部晶振为8MHz,9倍频,系统时钟为72MHz,SysTick的最高频率为9MHz(最大为HCLK/8),
在这个条件下,把SysTick效验值设置成9000,将SysTick时钟设置为9MHz,就能够产生
1ms的时间基值,即SysTick产生1ms的中断。
/*Configurethesystemclocks*/
RCC_Configuration();
SysTick_Configuration();
第一步:配置RCC寄存器和SysTick寄存器
RCC_Configuration:配置RCC寄存器
voidRCC_Configuration(void)
{
/*RCCsystemreset(fordebugpurpose)*/
RCC_DeInit();
/*EnableHSE*/
RCC_HSEConfig(RCC_HSE_ON);
/*WaittillHSEisready*/
12:.
百度文库-让每个人平等地提升自我
HSEStartUpStatus=RCC_WaitForHSEStartUp();
if(HSEStartUpStatus==SUCCESS)
{
/*HCLK=SYSCLK*/
RCC_HCLKConfig(RCC_SYSCLK_Div1);
/*PCLK2=HCLK*/
RCC_PCLK2Config(RCC_HCLK_Div1);
/*PCLK1=HCLK/2*/
RCC_PCLK1Config(RCC_HCLK_Div2);
/*Flash2waitstate*/
FLASH_SetLatency(FLASH_Latency_2);
/*EnablePrefetchBuffer*/
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
/*PLLCLK=8MHz*9=72MHz*/
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);
/*EnablePLL*/
RCC_PLLCmd(ENABLE);
/*WaittillPLLisready*/
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)
{
}
/*SelectPLLassystemclocksource*/
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
/*WaittillPLLisusedassystemclocksource*/
while(RCC_GetSYSCLKSource()!=0x08)
{
}
13:.
百度文库-让每个人平等地提升自我
}
/*EnableGPIOAandAFIOclocks*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|
RCC_APB2Periph_AFIO,ENABLE);
}
SysTick_Configuration:配置SysTick
voidSysTick_Configuration(void)
{
/*SelectAHBclock(HCLK)asSysTickclocksource*/
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
/*SetSysTickPriorityto3*/
NVIC_SystemHandlerPriorityConfig(SystemHandler_SysTick,3,0);
/*SysTickinterrupteach1mswithHCLKequalto72MHz*/
SysTick_SetReload(72000);
/*EnabletheSysTickInterrupt*/
SysTick_ITConfig(ENABLE);
}
第二步:配置SysTick中断函数
这里我们定义了一个TestSig全局变量,用于我们使用Keil软件自带的逻辑分析仪来分
析.
volatilevu32TimingDelay=0;
vu8TestSig=0;
14:.
百度文库-让每个人平等地提升自我
voidSysTickHandler(void)
{
TimingDelay--;
if(TimingDelay%2)
{
TestSig=1;
}
else
{
TestSig=0;
}
}
第三步:编写Delay延时函数
Delay:系统延时函数,使用系统时钟操作.
voidDelay(u32nTime)
{
/*EnabletheSysTickCounter*/
SysTick_CounterCmd(SysTick_Counter_Enable);
TimingDelay=nTime;
while(TimingDelay!=0);
/*DisabletheSysTickCounter*/
SysTick_CounterCmd(SysTick_Counter_Disable);
/*CleartheSysTickCounter*/
SysTick_CounterCmd(SysTick_Counter_Clear);
}
第四步:主函数中调用Delay
15:.
百度文库-让每个人平等地提升自我
在Mini-STM32开发板上有两个LED灯,分别是PA0,,让他们循
环点亮.
while(1)
{
GPIO_SetBits(GPIOA,GPIO_Pin_0);
Delay(100);
GPIO_ResetBits(GPIOA,GPIO_Pin_0);
Delay(100);
GPIO_SetBits(GPIOA,GPIO_Pin_1);
Delay(100);
GPIO_ResetBits(GPIOA,GPIO_Pin_1);
Delay(100);
}
(五)仿真调试
把工程便宜通过后,进入软件仿真
如下图所示:点击工程快捷菜单的逻辑分析仪
在逻辑分析仪中我们点击Setup按键会弹出安装对话框.
点右上方的"新建"图标,在菜单中输入"TestSig"这个全局变量.
"KillAll"删除所有
监视变量.
16:.
百度文库-让每个人平等地提升自我
全速运行后就可以看到下面的波形了哦
17:.
百度文库-让每个人平等地提升自我
如果你使用仿真器在Mini-STM32上调试的话你还可以看到两个LED在跑跑马灯程序了.
到此我们这章节的教程就结束了,相信大家也掌握了SystemTick的用法了.
(四)GPIO简单应用和外部中断
.
第一部份:GPIO的基本应用和IO口的配置
第二部份:外部中断的使用
--------------------------------------------------------------------------
1:设计要求:
18:.
百度文库-让每个人平等地提升自我
开发板上有2个LED,
时候所有的灯灭,等待2秒钟后恢复有规律的点亮.
2:硬件电路:
3:软件程序设计:
(1)根据要求配置GPIOA中的PA0,PA1为输出,PA3,PA8为输入

推荐大家看下面两篇文章.
备注:当STM32的GPIO端口设置为输出模式时,有三种速度可以选择:2MHz、10MHz和50MHz,
这个速度是指I/O口驱动电路的速度,是用来选择不同的输出驱动模块,达到最佳的噪声控
制和降低功耗的目的。
备注:共有8种模式,可以通过编程选择:




——(此模式可实现hotpower说的真双向IO)



模式7和模式8需根据具体的复用功能决定。
19:.
百度文库-让每个人平等地提升自我
voidGPIO_Configuration(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
/*-pull*/
=GPIO_Pin_0|GPIO_Pin_1;
=GPIO_Speed_50MHz;
=GPIO_Mode_Out_PP;
GPIO_Init(GPIOA,GPIO_InitStructure);
/*ConfigurePA3,PA8asinputfloating(EXTILine3,EXTILine8)*/
=GPIO_Pin_3|GPIO_Pin_8;
=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,GPIO_InitStructure);
}
(2)打开GPIOA的时钟,因为STM32是一个低功耗的MCU,每一个你使用的外围设备都
需要单独开启时钟,如果不开启将不能使用,这个也是对于STM32初学者容易疏忽的地方
/*EnableGPIOAandAFIOclocks*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|
RCC_APB2Periph_AFIO,ENABLE);
STM32共有5种时钟源,其中三种不同的时钟源可用作为驱动系统时钟(SYSCLK);
1、HSI由内部8MHzRC振荡器产生,它是可以直接用来作为系统时钟或经2分频后作为
PLLSRC输入。
HIS时钟频率在出厂时被校准在1%(25°C),在系统复位时,工厂校准值会被装载到时钟
控制寄存器的HISCAL[7..0]位。
用户可以通过更改HISCAL[4..0]来调整HSI频率。
另外时钟寄存器中有一个HSIRDY位用来指示HSIRC是不稳定工作,在时钟启过后,直到这
个标志位置被硬件置1后,HSIRC时钟才被输出。
HSIRC时钟还可以用时钟寄存器中的HSION位来启动和关闭。
HSI时钟同时也是HSE晶体荡振器的备用时钟源。
使用HSE时钟,程序设置时钟参数流程:
1、将RCC寄存器重新设置为默认值RCC_DeInit;
2、打开外部高速时钟晶振HSERCC_HSEConfig(RCC_HSE_ON);
3、等待外部高速时钟晶振工作HSEStartUpStatus=RCC_WaitForHSEStartUp();
4、设置AHB时钟RCC_HCLKConfig;
5、设置高速AHB时钟RCC_PCLK2Config;
6、设置低速速AHB时钟RCC_PCLK1Config;
20:.
百度文库-让每个人平等地提升自我
7、设置PLLRCC_PLLConfig;
8、打开PLLRCC_PLLCmd(ENABLE);
9、等待PLL工作while(RCC_GetF

STM32开发入门教程 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数60
  • 收藏数0 收藏
  • 顶次数0
  • 上传人小布er
  • 文件大小4.87 MB
  • 时间2023-03-08