硬件工程实践报告_第1页
硬件工程实践报告_第2页
硬件工程实践报告_第3页
硬件工程实践报告_第4页
硬件工程实践报告_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、深圳大学实验报告课程名称: 硬件工程实践实验项目名称:串口实验; ADC实验学院:医学院指导教师:董磊报告人(组长): 叶秋思学号:2012220034专业年级:生物医学工程2012 班级:02报告人(组员): 王凌峰学号:2012220042专业年级:医疗器械工程2012 班级:01报告人(组员): 卢健聪学号:2012220043专业年级:医疗器械工程2012 班级:01实验时间:2014.112014.12实验报告提交时间: 2015.1.4实验目的与要求:1. STM32 通过串口和上位机的对话, STM32 在收到上位机发过来的字符串后,控制LED灯( DS0)亮灭;2. 用定时器

2、6 触发 DAC1和 DAC2输出不同电压 (不超过 3.3V),用定时器 3 触发 ADC1, 使其两个通道分别采集并输出DAC1和 DAC2输出的电压。例如:用定时器 6 触发,使 DAC1输出 1V 电压, DAC2输出 2V 电压 (PA4引脚对 应 DAC1,PA5引脚对应 DAC2);用定时器 3触发 ADC1,使其第 7通道 PA7和第 8通 道 PB0 分别采集 PA4和 PA5的输出电压。方法、步骤:硬件部分ALIENTEK MiniSTM32 开发板CPU:STM32F103RCT6 LQFP64 FLASH:256K SRA:M 48KUSB 数据线NOTEBOOK: A

3、SUS A85VD O:SWindows 8.1 Pro x64软件部分编译环境: KEIL MDK-ARM Version 5.10STM32F10x Standard Peripherals Library(标准外设库)STM ISP 下载器: MCUISP 串口调试助手: XCOM V2.0 文档部分 参考文档: 1 STM32不完全手册 - 库函数版本 _V3.0 2 STM32中文参考手册 _V10外部链接: (STM32F1 Series -STMicroelectronics)manual/CD00171190.pdf (Reference manualSTM32F101xx,

4、STM32F102xx, STM32F103xx, STM32F105xx andSTM32F107xx advanced ARM? -based 32-bit MCUs)/wiki/STM32( 维基百科, STM32)( 开源电子网 )一、 串口实验根据实验要求,在 KEIL 编译环境下编写程序,生成 *.HEX文件; 通过 STM ISP 下载器( MCUISP)将程序下载到 STM32开发板中,运行程序; 使用 USB数据线连接 STM32开发板上的 USB_232接口,通过串口调试助手 (XCOM V2.0)发送指令字符串 1,使得 STM

5、32开发板上的指示灯 DS0亮 (红灯),发送指令字符串 0,使得 STM32开发板上的指示灯 DS0熄灭;1. 安装及配置 KEIL(MDK-ARM Version 5.10 )软件 ;2. 参考 STM32不完全手册 -库函数版本 _V3.0 第三篇 - 第八章 - 串口实 验;2.1 STM32 串口简介串口作为 MCU 的重要外部接口, 同时也是软件开发重要的调试手段, 其重要性不言 而喻。 现在基本上所有的 MCU 都会带有串口, STM32 自然也不例外。串口设置的一般步骤可以总结为如下几个步骤:1) 串口时钟使能, GPIO 时钟使能2) 串口复位3) GPIO 端口模式设置4)

6、 串口参数初始化5) 开启中断并且初始化 NVIC (如果需要开启中断才需要这个步骤)6) 使能串口7) 编写中断处理函数(具体参考 STM32中文参考手册 _V10第 25章 - 通用同步异步收发器 (USART)3. 以“标准例程 -V3.5 库函数版本 - ALIENTEKM INISTM32 实验 3 串口实验” 中的程序源码作为参考 ( 原程序实现如下功能: STM32 通过串口和上位机的对话, STM32 在收到上位机发过来的字符串后,原原本本的返回给上位机 ) ,打开程序源码目录下的工 程文件( USART.uvproj),然后在 KEIL 编译环境下修改 SYSTEM目录下的

7、文件以及 USER目录下的 文件;#include led.h#include sys.h#include usart.h/ 如果使用 ucos, 则包括下面的头文件即可 .#if SYSTEM_SUPPORT_UCOS#include includes.h /ucos 使用#endif/ 本程序仅供学习使用,未经作者许可,不得用于其它任何用途/ALIENTEK STM32 开发板/ 串口 1 初始化/ 正点原子 ALIENTEK/ 技术论坛 :/ 修改日期 :2012/8/18/ 版本: V1.5/ 版权所有,盗版必究。/Copyright(C) 广州市星翼电子科技有限公司 2009-201

8、9/All rights reserved/*/V1.3 修改说明/ 支持适应不同频率下的串口波特率设置 ./ 加入了对 printf 的支持/ 增加了串口接收命令功能 ./ 修正了 printf 第一个字符丢失的 bug/V1.4 修改说明/1, 修改串口初始化 IO 的 bug/2, 修改了 USART_RX_STA,使得串口最大接收字节数为 2的14 次方/3, 增加了 USART_REC_LEN,用于定义串口最大允许接收的字节数 (不大于 2的14 次方)/4, 修改了 EN_USART1_RX 的使能方式/V1.5 修改说明/1, 增加了对 UCOSII 的支持 / / 加入以下代码

9、 ,支持 printf 函数 ,而不需要选择 use MicroLIB #if 1#pragma import(_use_no_semihosting)/ 标准库需要的支持函数struct _FILEint handle;FILE _stdout;/ 定义 _sys_exit() 以避免使用半主机模式_sys_exit(int x)x = x;/ 重定义 fputc 函数int fputc(int ch, FILE *f) while(USART1-SR&0X40)=0); /循环发送 ,直到发送完毕USART1-DR = (u8) ch;return ch;#endif/* 使用 micro

10、Lib 的方法 */*int fputc(int ch, FILE *f) USART_SendData(USART1, (uint8_t) ch);while (USART_GetFlagStatus(USART1, USART_FLAG_TC) = RESET) return ch; int GetKey (void) while (!(USART1-SR & USART_FLAG_RXNE);return (int)(USART1-DR & 0x1FF); */ 串口 1 中断服务程序/ 注意 ,读取 USARTx-SR 能避免莫名其妙的错误u8 USART_RX_BUFUSART_RE

11、C_LEN; / 接收缓冲 ,最大 USART_REC_LEN 个字节 . / 接收状态/bit15 , 接收完成标志/bit14 , 接收到 0x0d/bit130 , 接收到的有效字节数目u16 USART_RX_STA=0;/ 接收状态标记/ 初始化 IO 串口 1 /bound: 波特率 void uart_init(u32 bound)/GPIO 端口设置GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure;ENABL

12、E);RCC APB2PeriphClockCmd(RCC APB2Periph USART1|RCC APB2Periph GPIOA,/ 使能 USART1 ,GPIOA 时钟USART_DeInit(USART1); / 复位串口 1/USART1_TX PA.9/ 复用推挽输出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; /PA.9 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GP

13、IOA, &GPIO_InitStructure); / 初始化 PA9/USART1_RXPA.10GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; / 浮空输入 GPIO_Init(GPIOA, &GPIO_InitStructure); / 初始化 PA10/Usart1 NVIC 配置NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;抢占优先级 3/ 子优先级 3/IRQ 通道使能VIC 寄存器NV

14、IC_InitStructure.NVIC_IRQChannelPreemptionPriority=3; / NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); / 根据指定的参数初始化/USART 初始化设置USART_InitStructure.USART_BaudRate = bound; / 一般设置为 9600;USART_InitStructure.USART_WordLen

15、gth = USART_WordLength_8b; /字长为 8 位数据格式USART_InitStructure.USART_StopBits = USART_StopBits_1; / 一个停止位 USART_InitStructure.USART_Parity = USART_Parity_No; /无奇偶校验位USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;/ 无硬件数据流控制USART_InitStructure.USART_Mode = USART_Mode_Rx | U

16、SART_Mode_Tx; / 收发模式USART_Init(USART1, &USART_InitStructure); / 初始化串口 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); / 开启中断 USART_Cmd(USART1, ENABLE); / 使能串口#if EN_USART1_RX / 如果使能了接收void USART1_IRQHandler(void) / 串口 1 中断服务程序 u8 Res;#ifdef OS_TICKS_PER_SEC/ 如果时钟节拍数定义了 ,说明要使用 ucosII 了.OSIntEnter();#e

17、ndif/ 接收中断 (接收到的数据必须if(USART GetITStatus(USART1, USART IT RXNE) != RESET)是 0x0d 0x0a 结尾 )Res =USART_ReceiveData(USART1);/(USART1-DR); / 读取接收到的数据if(Res=1)LED0=0;else if(Res=0) LED0=1;#ifdef OS_TICKS_PER_SEC/ 如果时钟节拍数定义了 ,说明要使用 ucosII 了.OSIntExit();#endif#endif#include delay.h#include led.h#include sys

18、.h#include usart.h/ALIENTEK Mini STM32 开发板范例代码 3/ 串口实验/ 技术支持: / 广州市星翼电子科技有限公司int main(void)u8 t;u8 len;u16 times=0;delay_init();/ 延时函数初始化NVIC_Configuration(); / 设置中断优先级分组 uart_init(9600);/ 串口初始化为 9600LED_Init(); / 初始化与 LED 连接的硬件接口while(1)4. 编译生成 *.HEX 文件;5. 下载验证, 将程序(USART.hex)下载到 MiniSTM32 开发板中, 运行

19、程序;6. 运行串口调试助手 XCOM,波特率设置为 9600,选择单条发送,其他选项 设置为默认值; 发送指令字符串 1,验证 MiniSTM32 开发板上的指示灯 DS0是否亮起; 发送指令字符串 0,验证 MiniSTM32 开发板上的指示灯 DS0是否熄灭; 运行结果:ADC实验1. 用定时器 6 触发 DAC1和 DAC2输出不同电压(不超过 3.3V ),用定时器 3 触发 ADC1,使其两个通道分别采集并输出 DAC1和 DAC2输出的电压。 例如:用定时器 6 触发,使 DAC1输出 1V电压, DAC2输出 2V电压 (PA4 引脚对应 DAC1,PA5引脚对应 DAC2);

20、用定时器 3 触发 ADC1,使其第 7 通 道 PA7和第 8 通道 PB0 分别采集 PA4和 PA5 的输出电压。2. 参考STM32不完全手册 -库函数版本 _V3.0 的第三篇 - 第二十章 - ADC 实验,第二十二章 DAC 实验;以及 STM32中文参考手册 _V10的第 11章 - 模拟/数字转换(ADC),第 12章 - 数字/模拟转换(DAC);2.1 STM32 ADC简 介STM32拥有 1-3 个 ADC( STM32F101/102 系列只有 1 个 ADC),这些 ADC可以独 立使用, 也可以使用双重模式(提高采样率) 。STM32 的 ADC 是 12 位逐

21、次逼近型 的模拟数字转换器。 它有 18个通道,可测量 16 个外部和 2个内部信号源。各通道 的 A/D 转换可以单次、连续、扫 描或间断模式执行。 ADC 的结果可以左对齐或右 对齐方式存储在 16 位数据寄存器中。模拟看门狗特性允许应用程序检测输入电压是 否超出用户定义的高 / 低阀值。STM32F103 系列最少都拥有 2个 ADC,我们选择的 STM32F103RCT 包含有 3 个 ADC。 STM32 的 ADC 最大的转换速率为1Mhz ,也就是转换时间为 1us (在ADCCLK=14M采, 样周期 为 1.5 个 ADC 时钟下得到) ,不要让 ADC 的时钟超过 14M,

22、 否则将导致结果准确度下降。STM32 将 ADC 的转换分为 2个通道组:规则通道组和注入通道组。规则通道相 当于你正常运行的程序,而注入通道呢,就相当于中断。在你程序正常执行的时候, 中断是可以打断你 的执行的。同这个类似,注入通道的转换可以打断规则通道的转 换, 在注入通道被转换完成之 后,规则通道才得以继续转换。 通过一个形象的例 子可以说明:假如你在家里的院子内放了 5 个温度探头,室内放了 3 个温度探头; 你需要时刻监视室外温度即可,但偶尔你想看看室内的温度;因此你可以使用规则 通道组循环扫描室外的 5 个探头并显示 AD 转换结果,当你想看室内温度时,通过 一个按钮启 动注入转

23、换组 (3 个室内探头 ) 并暂时显示室内温度,当你放开这个按钮 后,系统又会回到规则通 道组继续检测室外温度。从系统设计上,测量并显示室内 温度的过程中断了测量并显示室外温度的过程,但程序设计上可以在初始化阶段分 别设置好不同的转换组,系统运行中不必再变更 循环转换的配置,从而达到两个任 务互不干扰和快速切换的结果。可以设想一下,如果没有规则组和注入组的划分, 当你按下按钮后,需要从新配置 AD 循环扫描的通道,然后在释放按钮 后需再次配 置 AD 循环扫描的通道。 上面的例子因为速度较慢,不能完全体现这样区分( 规则通道组和注入通道组 ) 的好处,但 在工业应用领域中有很多检测和监视探头需

24、要较 快地处理,这样对 AD 转换的分组将简化事件 处理的程序并提高事件处理的速度。 STM32 其 ADC 的规则通道组最多包含 16 个转换,而注入通道组最多包含 4个通道。 关于这两个通道组的详细介绍,请参考STM32中文参考手册 _V10的第 155 页,第 11 章。 STM32 的 ADC 可以进行很多种不同的转换模式, 这些模式在 STM32中 文参考手册 _V10的第 11 章也都有详细介绍,我们这里就不在一一列举了。我们本 章仅介绍如何使用规则通道的单次转 换模式。 STM32 的 ADC 在单次转换模式下, 只执行一次转换,该模式可以通过 ADC_CR2 寄存器 的 ADO

25、N 位(只适用于规则通 道)启动,也可以通过外部触发启动(适用于规则通道和注入通道) ,这是 CONT 位 为 0 。 以规则通道为例, 一旦所选择的通道转换完成, 转换结果将被存在 ADC_DR 寄 存器中, EOC(转换结束)标志将被置位,如果设置了EOCIE,则会产生中断。然后 ADC 将停止,直到下次启动。2.2 ADC主要特征12 位分辨率转换结束、注入转换结束和发生模拟看门狗事件时产生中断 单次和连续转换模式 从通道 0 到通道 n 的自动扫描模式 自校准 带内嵌数据一致性的数据对齐 采样间隔可以按通道分别编程 规则转换和注入转换均有外部触发选项 间断模式 双重模式 (带 2个或以上 ADC的器件) ADC转换时间: STM32F103xx 增强型产品:时钟为 56MHz时为 1 s( 时钟为 72MHz为 1.17 s) STM32F101xx 基本型产品:时钟为 28MHz时为 1 s( 时钟为 36MHz为 1.55 s) STM32F102xxUSB型产品:时钟为 48MHz时为 1.2 s STM32F105xx 和 STM32F107xx产品:时钟为

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论