STM32开发学习进修学习入门教学教材.doc

上传人:小** 文档编号:631086 上传时间:2019-04-22 格式:DOC 页数:60 大小:1.70MB
返回 下载 相关 举报
STM32开发学习进修学习入门教学教材.doc_第1页
第1页 / 共60页
STM32开发学习进修学习入门教学教材.doc_第2页
第2页 / 共60页
点击查看更多>>
资源描述

《STM32开发学习进修学习入门教学教材.doc》由会员分享,可在线阅读,更多相关《STM32开发学习进修学习入门教学教材.doc(60页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、-_STM32 开发入门教程开发入门教程(一一) 开发环境建立及其应用开发环境建立及其应用入门准备入门准备: 我们常用的 STM32 开发编译环境为 Keil 公司的 MDK (Microcontroller Development Kit) 和 IAR 公司的 EWARM.在这里我们提供了比较稳定的新版本编译软件下载: MDK4.10 限于篇幅, 在我们的教程里面将先以 MDK 下的一个例子来介绍如何使用 MDK 进行嵌入 式应用开发.MDK 安装与配置安装与配置:基于 MDK 下的开发中基本的过程: (1) 创建工程; (2) 配置工程; (3) 用 C/C+ 或者 汇编语言编写源文件;

2、(4) 编译目标应用程序 (5) 修改源程序中的错误 (6) 测试链接应用程序- (1) 创建一个工程创建一个工程:在 uVision 3 主界面中选择 “Project“ - “New uVision Project“ 菜单项, 打开一个标准对话 框选择好你电脑中的保存目录后, 输入一个你的工程名字后点确认.我们的工程中建了一个 名字叫 “NewProject“ 的工程. 从设备库中选择目标芯片, 我们的 MINI-STM32 开发板使用的是 STM32F103V8T6, 因此 选中 STMicrocontroller 下对应的芯片:ARM 32-bit Cortex-M3 Microcon

3、troller, 72MHz, 64kB Flash, 20kB SRAM, PLL, Embedded Internal RC 8MHz and 32kHz, Real-Time Clock, Nested Interrupt Controller, Power Saving Modes, JTAG and SWD, 3 Synch. 16-bit Timers with Input Capture, Output Compare and PWM, 16-bit 6-ch Advanced Timer, 2 16-bit Watchdog Timers, SysTick Timer, 2 S

4、PI, 2 I2C, 3 USART, USB 2.0 Full Speed Interface, CAN 2.0B Active, 2 12-bit 16-ch A/D Converter, Fast I/O Ports-_-_选择完芯片型号后会提示是否在目标工程中加入 CPU 的相关的启动代码, 如下图所示. 启动代码是用来初始化目标设备的配置, 完成运行的系统初始化工作, 因此我们选择 “是“ , 这会使系统的启动代码编写工作量大大减少.- (2)(2) 配置工程配置工程: :选择菜单中 “Project“ - “Option for Target“ 或者 选择快捷菜单中的图标:因为 M

5、INI-STM32 开发板上使用的就是 8M 的晶振且是使用的片内的 RAM 和 ROM 因此 “taget“ 下我们都可以使用默认的配置;在“Output“菜单下我们需要选中 “Creat Hex File“ 来生成编译好的工程代码, 此工程可以通过仿真器或者串口 ISP 烧录进开发板中.注: ISP 烧录过程我们将在入门教程二中给大家介绍.“Listing“ “User“ 菜单中我们保持默认即可.“C/C+“ 菜单为我们常用的菜单, 这里简单的介绍下他们的具体功能:PreProcesser Symbols 中的 Define, Undefine 菜单表示是工程的宏定义中的变量, 我们将在今

6、后的教程中详细介绍这个功能.-_Optimization 为优化选项, Level0 为不优化, 这种模式最适合调试, 因为不会优化掉代码, 基本每个用到的变量都可以打断点. Level3 为优化等级最高, 最适合生产过程中下载到芯片中的代码. Include Path 为工程中的包含路径, 一般需将 .h 文件或者库文件的地址配置进去.“Asm“ 和 “Link“ 将在今后的高级教程中介绍.“Debug“ 为我们调试使用的配置选项, “Use Simulator“ 为使用软件仿真. 这里根据大家手里的仿真器来选择配置环境.如果你使用的是 Ulink, 那么就选择 “Ulink Cotex D

7、ebug“, 如果你选择的是 JLINK, 那么就选择 “ Cotex M3 Jlink“, 如果你使用的是 ST 公司出的简易仿真器 ST-Link , 那么你就选择 “ST-Link Debug“.注意: 右边当中的选项 “Run to main“ 选项如果勾上就表示仿真时进入了就会进入到 main 函数, 如果没有选上就会进入初始地址, 你需要自己打断点运行到你的主程序 main 处.-_当插上仿真器后选择上面右图中的 Setting 后会跳出一个仿真器的配置菜单. 左边会自动识别出你的仿真器的信息.如下图为 ULINK2 的信息:-_对于 SWJ 选项为三线制调试, 将在后面的高级教程

8、中介绍. 右下方有两个选项: “Verify Code Download“ : 表示下载后校验数据 “Download to flash“: 表示当仿真的时候先将目标代码下载到 Flash 中.Trace 菜单为跟踪配置, 可以实时的将一些变量使用曲线的形式实时表示出来, 我们将在 今后的高级教程中介绍这一项功能. 注意: 市面上目前的盗版 Ulink2 不支持这项功能, 正版的支持, Jlink 也不支持这项功 能.“Flash Download“ 菜单用来配置使用仿真器程序下载的配置选项, 大家务必选择好和你 芯片配套的选项. 如果你是使用的别人模板下修改为你的工程, 这个选项请注意一下,

9、 如 果不正确将不能将你的代码下载到芯片中.配置好 “Debug“ 后, 那么 “Utilities“ 可以不用配置. 如果你使用的是仿真器仿真, 在你已经正确得将目标板和仿真器建立了物理连接后, 请选 择正确的仿真器进行配置.-_(二二) ISP 在线下载程序在线下载程序ISPISP:inin systemsystem programmingprogramming简介简介: :ISP: 用写入器将 code 烧入,不过,芯片可以在目标板上,不用取出来,在设计目标板的时候就将接口设计在上面,所以叫“在系统编程“,即不用脱离系统; 应用场合: 1,ISP 程序升级需要到现场解决,不过好一点的是不

10、必拆机器了; ISP 的实现一般需要很少的外部电路辅助实现,通常可利用单片机的串行口接到计算机的 RS232 口,通过专门设计的固件程序来编程内部存储器。主要是指代芯片的烧写方式,以往写片子需要把片子拿下来,离开电路,用 编程器烧,换句话说,芯片不能不脱离应用系统进行写入。 ISP 主要针对这个问题,使用 JTAG 或者串行口(MCU 内部有 Boot Loader,通过指定的方式激活之,它可以和 PC 或其它上位机通过串口联系,不用使单片机离开应用系统而更新内部的程序/设置)进行程序的烧写操作。因此,具有 ISP 功能的 MCU 可以不使用编程器进行编程。当然,实现 ISP 可能需要一些硬件

11、电路支持,具体的在数据手册中有说明。一般具备 ISP 功能后,就不要编程器了,而是使用下载线进行编程工作。但是不是说他们就一定不支持编程器了,具体型号具体分析。是否需要仿真器进行仿真和是否具备ISP 和 IAP 没有必然的联系。只不过具备了 IAP 功能,可以在 MCU 内写入监控程序,模拟一个仿真器,当然,这个监控程序是要消耗资源的,和使用硬件的仿真器还有一定的差异。-以上就是以上就是 ISPISP 的一些概念上的描述的一些概念上的描述, , 现在通俗点说就是怎么利用工具把程序下载到芯片当现在通俗点说就是怎么利用工具把程序下载到芯片当中去中去. .第一步第一步: : 配置工程配置工程, ,

12、输出编译后的代码输出编译后的代码 .Hex.Hex 文件文件: :我们打开第一个我们的教程例子, GPIO_Test 这个例子工程. 先按照下面的步骤来配置一下工程:-_点击下图中的 Option 选项;选中 “Output“ 菜单下的 “Create HEX File “, 并且在右边的 “Name of Executable“ 中填写我们生成编译代码的文件名称.-_配置完选项后, 点击工程编译按钮, 然后我们就可以在 Example2-GPIOGPIO_testoutput 目录下面得到 Gpio_Test.Hex 文件了.第二步第二步: : 准备串口物理连接和准备串口物理连接和 设置设置

13、 BootBoot 跳线选择芯片启动类型跳线选择芯片启动类型先需要准备一根串口延长线, 一头为公头,一头为母头的串口连接线 (非交叉线), 和一台有串口的电脑. (注意:如果您的电脑没有串口,请购买 “USB 转 RS232“ 的硬件设备来扩充你电脑的串口.) 将 Mini-STM32 的 J1 跳线帽跳至 2,3 两脚上选择芯片从内部的 Boot 区启动, 上电后会先进入 ISP 状态.连接串口线至你的电脑上的串口将 USB 延长线连接至你的电脑上给 Mini-STM32 开发板供上 5V 电源. 当开发板上的电源指示灯点亮后一切准备就绪. 第三步第三步: : 配置配置 ISPISP 下载软

14、件下载软件 mcuisp.exe:mcuisp.exe:您可以点击下载稳定版的 mcuisp V0.975 版本的软件: mcuisp.rarmcuisp.rar (576.58 KB) 打开 mcuisp.exe 绿色软件,选择好您连接至开发板使用的电脑上的串口, 可以通过搜索串口菜单来自动搜索出你电脑上的串口信息.在左上方的“程序文件“选择你准备烧入芯片中的代码, 就是前面我们生成的Gpio_Test.Hex. 然后在菜单选项栏上选择 “STMISP“ 菜单, 点击 “读 STM32 器件信息“ 命令按钮.我们会在右边的信息框中显示出连接成功的信息: 如图所示:-_选择上“校验“和“编程后

15、运行“两个选项后点击“开始编程“. 会报出程序成功烧入芯片的一些信息, 如下:- DTR 电平置高(+3-+12V),复位 RTS 置高(+3-+12V),选择进入 BootLoader .延时 100 毫秒 DTR 电平变低(-3-12V)释放复位 RTS 维持高 开始连接.3, 接收到:1F 在串口 COM4 连接成功115200bps,耗时 343 毫秒 芯片内 BootLoader 版本号:2.1 芯片 PID:00000410 芯片 FLASH 容量为 128KB 芯片 SRAM 容量为 65535KB(此信息仅供参考,新版本芯片已不包含此信息) 96 位的芯片唯一序列号:33006

16、C065839353235581943 读出的选项字节:A55AFF00FF00FF00FF00FF00FF00FF00 全片擦除成功 第 547 毫秒,已准备好 共写入 2KB,进度 100%,耗时 4343 毫秒 成功从 08000000 开始运行 向您报告,命令执行完毕,一切正常-这个时候您可以看到您手中的这个时候您可以看到您手中的 Mini-STM32Mini-STM32 开发板上的两个红色开发板上的两个红色 LEDLED 有规律的轮流点亮有规律的轮流点亮, , 说明程序已经成功的烧入芯片了说明程序已经成功的烧入芯片了. .-_最后您在断电后将最后您在断电后将 Mini-STM32M

17、ini-STM32 上上 J1J1 的跳线帽跳至的跳线帽跳至 1,21,2 引脚上引脚上, , 重新上电后重新上电后, , 程序就可程序就可 以正常运行了以正常运行了. .(三三) 系统时钟系统时钟 SysTick( (一一) ) 背景介绍背景介绍 在传统的嵌入式系统软件按中通常实现 Delay(N) 函数的方法为:for(i = 0; i = x; i +); x - 对应于 对应于 N 毫秒的循环值对于 STM32 系列微处理器来说,执行一条指令只有几十个 ns,进行 for 循环时,要实现 N 毫秒的 x 值非常大,而且由于系统频率的宽广,很难计算出延时 N 毫秒的精确值。针对 STM3

18、2 微处理器,需要重新设计一个新的方法去实现该功能,以实现在程序中使用 Delay(N)。( (二二) ) STM32STM32 SysTickSysTick 介绍介绍 Cortex-M3 的内核中包含一个 SysTick 时钟。SysTick 为一个 24 位递减计数器,SysTick 设定初值并使能后,每经过 1 个系统时钟周期,计数值就减 1。计数到 0 时,SysTick 计数器自动重装初值并继续计数,同时内部的 COUNTFLAG 标志会置位,触发中断 (如果中断使能情况下)。在 STM32 的应用中,使用 Cortex-M3 内核的 SysTick 作为定时时钟,设定每一毫秒产生一

19、次中断,在中断处理函数里对 N 减一,在 Delay(N) 函数中循环检测 N 是否为 0,不为 0 则进行循环等待;若为 0 则关闭 SysTick 时钟,退出函数。注:注: 全局变量全局变量 TimingDelayTimingDelay , , 必须定义为必须定义为 volatilevolatile 类型类型 , , 延迟时间将不随系统时钟频延迟时间将不随系统时钟频率改变。率改变。-_( (三三) ) STST SysTickSysTick 库文件库文件使用 ST 的函数库使用 systick 的方法1、调用 SysTick_CounterCmd() - 失能 SysTick 计数器2、调

20、用 SysTick_ITConfig () - 失能 SysTick 中断 3、调用 SysTick_CLKSourceConfig() - 设置 SysTick 时钟源。4、调用 SysTick_SetReload() - 设置 SysTick 重装载值。5、调用 SysTick_ITConfig () - 使能 SysTick 中断6、调用 SysTick_CounterCmd() - 开启 SysTick 计数器( (四四) ) SystemTickSystemTick 工程实战工程实战外部晶振为 8 MHz,9 倍频,系统时钟为 72MHz,SysTick 的最高频率为 9MHz(最大

21、为 HCLK / 8),在这个条件下,把 SysTick 效验值设置成 9000,将 SysTick 时钟设置为 9 MHz, 就能够产生 1ms 的时间基值,即 SysTick 产生 1ms 的中断。/* Configure the system clocks */RCC_Configuration();SysTick_Configuration();第一步第一步: : 配置配置 RCCRCC 寄存器寄存器 和和 SysTickSysTick 寄存器寄存器RCC_Configuration: 配置 RCC 寄存器void RCC_Configuration(void)/* RCC syste

22、m reset(for debug purpose) */RCC_DeInit();/* Enable HSE */RCC_HSEConfig(RCC_HSE_ON);/* Wait till HSE is ready */-_HSEStartUpStatus = RCC_WaitForHSEStartUp();if(HSEStartUpStatus = SUCCESS)/* HCLK = SYSCLK */RCC_HCLKConfig(RCC_SYSCLK_Div1); /* PCLK2 = HCLK */RCC_PCLK2Config(RCC_HCLK_Div1); /* PCLK1 =

23、HCLK/2 */RCC_PCLK1Config(RCC_HCLK_Div2);/* Flash 2 wait state */FLASH_SetLatency(FLASH_Latency_2);/* Enable Prefetch Buffer */FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);/* PLLCLK = 8MHz * 9 = 72 MHz */RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);/* Enable PLL */ RCC_PLLCmd(ENABLE);/

24、* Wait till PLL is ready */while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET)/* Select PLL as system clock source */RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);/* Wait till PLL is used as system clock source */while(RCC_GetSYSCLKSource() != 0x08)-_/* Enable GPIOA and AFIO clocks */RCC_APB2PeriphClockCm

25、d(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);SysTick_Configuration: 配置 SysTick void SysTick_Configuration(void)/* Select AHB clock(HCLK) as SysTick clock source */SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);/* Set SysTick Priority to 3 */NVIC_SystemHandlerPriorityConfig(SystemHandler_Sy

26、sTick, 3, 0);/* SysTick interrupt each 1ms with HCLK equal to 72MHz */SysTick_SetReload(72000);/* Enable the SysTick Interrupt */SysTick_ITConfig(ENABLE);第二步第二步: : 配置配置 SysTickSysTick 中断函数中断函数这里我们定义了一个 TestSig 全局变量, 用于我们使用 Keil 软件自带的逻辑分析仪来分析.volatile vu32 TimingDelay = 0;vu8 TestSig = 0;-_void SysTi

27、ckHandler(void)TimingDelay-;if(TimingDelay % 2)TestSig = 1;elseTestSig = 0;第三步第三步: : 编写编写 DelayDelay 延时函数延时函数Delay: 系统延时函数, 使用系统时钟操作.void Delay(u32 nTime)/* Enable the SysTick Counter */SysTick_CounterCmd(SysTick_Counter_Enable);TimingDelay = nTime;while(TimingDelay != 0);/* Disable the SysTick Coun

28、ter */SysTick_CounterCmd(SysTick_Counter_Disable);/* Clear the SysTick Counter */SysTick_CounterCmd(SysTick_Counter_Clear);第四步第四步: : 主函数中调用主函数中调用 DelayDelay-_在 Mini-STM32 开发板上有两个 LED 灯, 分别是 PA0, PA1. 我们做个流水灯程序, 让他们循环点亮.while(1) GPIO_SetBits(GPIOA,GPIO_Pin_0);Delay(100);GPIO_ResetBits(GPIOA,GPIO_Pin_

29、0);Delay(100);GPIO_SetBits(GPIOA,GPIO_Pin_1);Delay(100);GPIO_ResetBits(GPIOA,GPIO_Pin_1);Delay(100); ( (五五) ) 仿真调试仿真调试把工程便宜通过后, 进入软件仿真如下图所示:点击工程快捷菜单的逻辑分析仪在逻辑分析仪中我们点击 Setup 按键会弹出安装对话框.点右上方的 “新建“ 图标, 在菜单中输入 “TestSig“ 这个全局变量.添加完之后就可以点 Close 了. 如果您仿真完可以点击 左下方的 “Kill All“ 删除所有监视变量.-_全速运行后就可以看到下面的波形了哦-_如果

30、你使用仿真器在 Mini-STM32 上调试的话你还可以看到两个 LED 在跑跑马灯程序了. 到此我们这章节的教程就结束了, 相信大家也掌握了 System Tick 的用法了.(四四) GPIO 简单应用和外部中断简单应用和外部中断这个章节我们将学习最基本的 STM32 的 GPIO 的应用. 我们将分为两个章节来学习.第一部份: GPIO 的基本应用和 IO 口的配置第二部份: 外部中断的使用-1:1: 设计要求设计要求: :开发板上有 2 个 LED, 我们的目的为有规律的点亮 LED1 和 LED2. 当按键按下去的时候所有的灯灭, 等待 2 秒钟后恢复有规律的点亮.-_2:2: 硬件

31、电路硬件电路: :3:3: 软件程序设计软件程序设计: :(1)(1) 根据要求配置根据要求配置 GPIOAGPIOA 中的中的 PA0,PA1PA0,PA1 为输出为输出, , PA3,PA3, PA8PA8 为输入为输入 对于下面程序中的 GPIO_InitStructure.GPIO_Speed 和 GPIO_InitStructure.GPIO_Mode 推荐大家看下面两篇文章.STM32 GPIO 的十大优越功能综述 备注: 当 STM32 的 GPIO 端口设置为输出模式时,有三种速度可以选择:2MHz、10MHz 和 50MHz,这个速度是指 I/O 口驱动电路的速度,是用来选择

32、不同的输出驱动模块,达到最佳 的噪声控制和降低功耗的目的。STM32 GPIO 端口的输出速度设置 备注: 共有 8 种模式,可以通过编程选择:1. 浮空输入2. 带上拉输入3. 带下拉输入4. 模拟输入5. 开漏输出(此模式可实现 hotpower 说的真双向 IO)6. 推挽输出7. 复用功能的推挽输出8. 复用功能的开漏输出 模式 7 和模式 8 需根据具体的复用功能决定。void GPIO_Configuration(void)-_GPIO_InitTypeDef GPIO_InitStructure;/* Configure PA. as Output push-pull */GPI

33、O_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOA, GPIO_InitStructure);/* Configure PA3,PA8 as input floating (EXTI Line3 , EXTI Line8) */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pi

34、n_8;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, GPIO_InitStructure); (2)(2) 打开打开 GPIOAGPIOA 的时钟的时钟, 因为 STM32 是一个低功耗的 MCU , 每一个你使用的外围设备都 需要单独开启时钟, 如果不开启将不能使用, 这个也是对于 STM32 初学者容易疏忽的地方/* Enable GPIOA and AFIO clocks */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Perip

35、h_AFIO, ENABLE);STM32 共有 5 种时钟源,其中三种不同的时钟源可用作为驱动系统时钟(SYSCLK); 1、HSI 由内部 8MHz RC 振荡器产生,它是可以直接用来作为系统时钟或经 2 分频后作为 PLLSRC 输入。 HIS 时钟频率在出厂时被校准在 1%(25C),在系统复位时,工厂校准值会被装载到时钟 控制寄存器的 HISCAL7.0 位。 用户可以通过更改 HISCAL4.0来调整 HSI 频率。 另外时钟寄存器中有一个 HSIRDY 位用来指示 HSI RC 是不稳定工作,在时钟启过后,直到 这个标志位置被硬件置 1 后,HSI RC 时钟才被输出。 HSI

36、RC 时钟还可以用时钟寄存器中的 HSION 位来启动和关闭。HSI 时钟同时也是 HSE 晶体荡振器的备用时钟源。使用 HSE 时钟,程序设置时钟参数流程: 1、将 RCC 寄存器重新设置为默认值 RCC_DeInit; 2、打开外部高速时钟晶振 HSE RCC_HSEConfig(RCC_HSE_ON); 3、等待外部高速时钟晶振工作 HSEStartUpStatus = RCC_WaitForHSEStartUp(); 4、设置 AHB 时钟 RCC_HCLKConfig; 5、设置高速 AHB 时钟 RCC_PCLK2Config; 6、设置低速速 AHB 时钟 RCC_PCLK1Co

37、nfig; 7、设置 PLL RCC_PLLConfig; 8、打开 PLL RCC_PLLCmd(ENABLE); 9、等待 PLL 工作 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET) -_10、设置系统时钟 RCC_SYSCLKConfig; 11、判断是否 PLL 是系统时钟 while(RCC_GetSYSCLKSource() != 0x08) 12、打开要使用的外设时钟 RCC_APB2PeriphClockCmd()/RCC_APB1PeriphClockCmd()具体设置请参考下面的文章STM32 时钟系统与软件配置STM3

38、2 的时钟系统分析STM32 的时钟与 RTC(3)(3) 设置外部中断设置外部中断, 所有的 GPIO 口都可以作为外部中断源. 具体可以参考下面这篇文章.STM32 中外部中断与外部事件/* Connect EXTI Line3 to PA.3 */GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource3);/* Configure EXTI Line3 to generate an interrupt on falling edge */ EXTI_InitStructure.EXTI_Line = EXTI_Line3;EXTI

39、_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(EXTI_InitStructure);同样不要忘记打开时钟, 我们在打开 PA 口的时候已经加上了 RCC_APB2Periph_AFIO, 这 里再提醒大家一下./* Enable GPIOA and AFIO clocks */RCC_APB2PeriphClockCmd(RCC_APB

40、2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);最后就是编写外部中断入口函数.void EXTI3_IRQHandler(void) int i;if(EXTI_GetITStatus(EXTI_Line9) != RESET)GPIO_SetBits(GPIOA,GPIO_Pin_0);GPIO_SetBits(GPIOA,GPIO_Pin_1);for(i=0;i=8000000;i+);-_GPIO_ResetBits(GPIOA,GPIO_Pin_0);GPIO_ResetBits(GPIOA,GPIO_Pin_1);for(i=0;i=100

41、0000;i+)/* Clear the EXTI line 3 pending bit */EXTI_ClearITPendingBit(EXTI_Line3); 不要忘记在中断函数处理完成后清掉标志位,不然会不停的进入中断.(4)(4) 编译与调试编译与调试我们已经完成所有程序编写部份, 接下来就是将工程编译成功后下载到我们的 Mini-STM32 开发板中进行调试和仿真.如果看到 LED 有规律的点亮和熄灭, 按下按钮后 LED 先是一起熄灭, 在一起点亮, 然后恢复有规律的点亮这个过程, 说明我们已经达到我们的设计目标. -总结总结: : 我们学习完了这篇教程之后我们学习完了这篇教程之

42、后, , 相信大家对下面几个方面的内容已经掌握了相信大家对下面几个方面的内容已经掌握了. . * * GPIOGPIO 的设置的设置 * * STM32STM32 GPIOGPIO 的优势的优势 * * STM32STM32 的时钟结构的时钟结构 * * 外部中断的配置外部中断的配置 * * 外部中断和外部事件的区别外部中断和外部事件的区别(五五) 异步串口双工通讯异步串口双工通讯( (一一) ) STM32STM32 的的 USARTUSART 模拟介绍模拟介绍通用同步异步收发器(USART)提供了一种灵活的方法来与使用工业标准 NR 异步串行数据格式的外部设备之间进行全双工数据交换。 US

43、ART 利用分数波特率发生器提供宽范围的波特率选择。 -_它支持同步单向通信和半双工单线通信。它也支持 LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC 规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。用于多缓冲器配置的 DMA 方式,可以实现高速数据通信。 主要特性: 全双工的,异步通信 NR 标准格式 分数波特率发生器系统 -发送和接收共用的可编程波特率,最高到 4.5Mbits/s 可编程数据字长度(8 位或 9 位) 可配置的停止位 -支持 1 或 2 个停止位 LIN 主发送同步断开符的能力以及 LIN 从检测断开符的能力 - 当 USA

44、RT 硬件配置成 LIN 时,生成 13 位断开符;检测 10/11 位断开符 发送方为同步传输提供时钟 IRDA SIR 编码器解码器 - 在正常模式下支持 3/16 位的持续时间 智能卡模拟功能 - 智能卡接口支持 ISO7816 -3 标准里定义的异步协议智能卡 - 智能卡用到的 0.5 和 1.5 个停止位 单线半双工通信 使用 DMA 的可配置的多缓冲器通信 - 在保留的 SRAM 里利用集中式 DMA 缓冲接收/发送字节 单独的发送器和接收器使能位 检测标志 - 接收缓冲器满 - 发送缓冲器空 - 传输结束标志 校验控制 - 发送校验位 - 对接收数据进行校验 四个错误检测标志 -

45、 溢出错误 - 噪音错误 - 帧错误 - 校验错误 10 个带标志的中断源 -_- CTS 改变 - LIN 断开符检测 - 发送数据寄存器- 发送完成 - 接收数据寄存器- 检测到总线为空- 溢出错误 - 帧错误 - 噪音错误 - 校验错误 多处理器通信 - - 如果地址不匹配,则进入静默模式 从静默模式中唤醒(通过空闲总线检测或地址标志检测) 两种唤醒接收器的方式 - 地址位(MSB)- 空闲总线( (二二) ) 程序编写程序编写(1) 在 RCC_Configuration 函数中, 打开串口时钟/* Enable USART1, GPIOA, GPIOx and AFIO clocks

46、 */RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOx| RCC_APB2Periph_AFIO, ENABLE);(2) 设置串口的 RTX, TDX IO 口的属性void GPIO_Configuration(void)GPIO_InitTypeDef GPIO_InitStructure;/* Configure USART1 Rx (PA.10) as input floating */GPIO_InitStructure.GPIO_Pin = GPIO

47、_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, GPIO_InitStructure);-_/* Configure USART1 Tx (PA.09) as alternate function push-pull */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GP

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com