首页 > 领导讲话 > 纪检讲话 / 正文
AD,转换器实验
2020-12-16 10:21:57 ℃齐 鲁 理 工 学 院 实
验
报
告
课程名称:
微型计算机控制技术
时间:
2020.11.05 地点:
D203
班级:
2017级机制3班
姓名:
杨帆 学号:
171031010304
实验项目名称:
A/D 转换器实验
实验指导教师:
赵保华
实验成绩评定:
一、 实验目的
ü通过实验掌握 STM32
A/D 转换器的功能与作用。
掌握 STM32A/D 转换器的配置与使用。
二、 实验设备 ü硬件:信盈达STM32 实验平台,STlink 仿真器套件,PC 机,串口连接线;
软件:KEIL for ARM(MDK)集成开发环境,串口调试助手,Windows 7/8/10/XP。
三、 实验内容 利用 ADC 的第 1 通道对信盈达Cotex-M3 实验平台上单圈电位器的电压值作 AD 转换,采用连续转换模式。ADC 转换的结果,通过串口发送到PC显示。
四、 实验原理
五、 软件程序设计 1、程序完成以下工作:
移植:
1)移植内核定时器实现精确延时。sys_tick.c
sys_tick.h
配置ADC 配置 GPIO 口,将 PA1配置为 ADC 的第 1 采样通道;
设置 ADC,将 ADC_IN1 设置为连续转换模式;
配置串口及相关发送功能;
利用串口发送 AD 转换结果。
3. 观察实验结果
将VER+和VDDS,VERF—和GND用跳线帽连起来,旋转电位器,即 AD 输入旋钮,可以看到串口输出数值不断变化,
3.6.7 实验参考程序
main.c参考程序:
#include “stm32f10x.h“ #include “stdio.h“ #include “uart.h“ #include “adc.h“ #include “sys_tick.h“ #include “NVIC.h“
int main(void) {
NVIC_Config();
//NVIC中断管理初始化
SysTickConfig(); //滴答时钟初始化,实现精确延时
UART1_Init();
//串口1初始化
Adc_Init();
//ADC初始化
while(1)
{
Adc_test();
//ADC测试函数,打印滑动变阻器的电压值
Delay_ms(2000);//精确延时2000ms
} }
adc.c参考程序:
#include “stm32f10x.h“ #include “adc.h“ #include “sys_tick.h“ #include “stdio.h“
//adc的初始化 void Adc_Init(void) {
GPIO_InitTypeDef GPIO_InitStructure;
ADC_InitTypeDef ADC_InitStructure;
//开启GPIO口和ADC的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1,ENABLE);
//给ADC采样分频 72/8 = 9
RCC_ADCCLKConfig(RCC_PCLK2_Div8);
//设置ADC输入管脚PA1
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//模拟输入引脚
GPIO_Init(GPIOA,&GPIO_InitStructure);
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC独立模式
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//单次循环模式还是连续循环模式 DISABLE单次循环
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
//多通道还是单通道 DISABLE单通道
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//有事件触发还是软件触发
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//数据右对齐 -- 低12位
ADC_InitStructure.ADC_NbrOfChannel = 1;//顺序转换的规则组的通道数目
ADC_Init(ADC1,&ADC_InitStructure);
//给相关寄存器赋值
ADC_Cmd(ADC1,ENABLE);
//开启ADC1
ADC_ResetCalibration(ADC1);
//使用复位校准,就是初始化校准寄存器
while(ADC_GetResetCalibrationStatus(ADC1) == SET);
ADC_StartCalibration(ADC1);
//A/D校准
while(ADC_GetCalibrationStatus(ADC1) == SET);
} //得到ADC值 void Get_adcvalue(u8 channel,u16 *value) {
//设置指定ADC的规则组通道,一个序列,采样时间
ADC_RegularChannelConfig(ADC1,channel,1,ADC_SampleTime_239Cycles5);
//软件启动ADC转换
ADC_SoftwareStartConvCmd(ADC1,ENABLE);
//等待ADC转换完成
while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC) != SET);
*value = ADC_GetConversionValue(ADC1); }
/* 测试读取外部滑动变阻器的电压值 */ void Adc_test(void) {
u16 temp = 0;
float ad_value;
Get_adcvalue(1,&temp);//获取通道1的值 // printf(“%#x\r\n“,temp);
ad_value = (3.3*(float)temp)/4096.0;//转换得到实际的电压值
printf(“%f\r\n“,ad_value);
Delay_ms(500); }
adc.h参考程序:
#ifndef _ADC_H_ #define _ADC_H_ #include “stm32f10x.h“ void Adc_Init(void); void Get_adcvalue(u8 channel,u16 *value); void Adc_test(void); #endif
sys_tick.c参考程序 #include “stm32f10x.h“ //#include “core_cm3.h“
//#include “stdio.h“ //#include “stdlib.h“
//#include “uart.h“ //#include “adc.h“ #include “sys_tick.h“ //#include “NVIC.h“
/* static __INLINE uint32_t SysTick_Config(uint32_t ticks); //用来装载定时的时间值 void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource); //用来设置滴答时钟的时钟频率
目的:用滴答时钟形成一个1us的定时器; 1us = T*(1/f); T:要装载的数; f:滴答时钟运行的时钟频率;
1s = 1000ms; 1ms = 1000us; 1s = 1000000us; 1M = 1000000; 1/1M = 1us; t= 1/72M = 1/72us 1us = 72 * t; SystemCoreClock/1000000 ---- 1us SystemCoreClock/100000
---- 10us SystemCoreClock/10000
---- 100us SystemCoreClock/1000
---- 1ms SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;//打开滴答时钟
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;//关闭滴答时钟 */ /**************************************************** 函数名:SysTickConfig 形参:无 返回值:无 函数功能:滴答时钟初始化 ****************************************************/ void SysTickConfig(void) {
//配置为72Mhz时钟
//t= 1/72M = 1/72us; // SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
if(SysTick_Config(SystemCoreClock/1000000) == 1)//赋初值
{
//72
while(1);
}
//关闭滴答时钟
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
//SysTick->CTRL &= ~0x01;// 0xfe
1111 1110
//SysTick->CTRL |= 0x01;
//给某些位写0,用按位与(&)
//给某些位写1,用按位或(|) } /**************************************************** 函数名:Delay_us 形参:time代表要延时的时间(单位us) 返回值:无 函数功能:精确us延时函数 ****************************************************/ u32 TimeDelay = 0; void Delay_us(u32 time) {
TimeDelay = time;
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
while(TimeDelay !=0);
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; } /**************************************************** 函数名:Delay_ms 形参:time代表要延时的时间(单位ms) 返回值:无 函数功能:精确ms延时函数 ****************************************************/ void Delay_ms(u32 time) {
TimeDelay = time*1000;
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
while(TimeDelay !=0);
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; } /**************************************************** 函数名:SysTick_Handler 形参:无 返回值:无 函数功能:滴答时钟中断服务函数 ****************************************************/ void SysTick_Handler(void) {
if(TimeDelay > 0)
TimeDelay--; }
sys_tick.h参考程序 #ifndef _SYS_TICK_H_ #define _SYS_TICK_H_ //#include “includes.h“
#include “stm32f10x.h“ void SysTickConfig(void); void Delay_us(u32 time); void Delay_ms(u32 time); #endif
Uart.h 参考程序 #ifndef _UART_H_ #define _UART_H_ void UART1_Init(void);//串口1初始化 void USART1_Echo(void);//串口1回显函数 void Show_Logo(void);
//在终端上显示LOGO #endif
NVIC.c #include “NVIC.h“ #include “stm32f10x.h“ //#include “core_cm3.h“ /**************************************************** 函数名:NVIC_Config 形参:无 返回值:无 函数功能:响应中断和抢占中断的分组 ****************************************************/ void NVIC_Config(void)//响应中断和抢占中断的分组 {
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); }
NVIC.h #ifndef _NVIC_H_ #define _NVIC_H_ void NVIC_Config(void);//响应中断和抢占中断的分组 #endif
六、 实验操作步骤
实验操作步骤
准备实验环境 使用 STlink 仿真器连接 信盈达STM32 实验平台的主板 JTAG 接口;使用 实验平台附带的USB数据线,连接实验平台主板和PC。
新建工程,编写程序,完成软件设计
新建工程保存文件夹,复制相应的库文件;
在开发环境中新建工程,配置工程选项;
新建程序代码文件,添加到工程,完成程序编码,无误后将程序下载到开发板的 Flash 中,按 RESET 键复位; 添加前面实验程序中的uart.h
uart.c nvic.h nvic.c 在 PC 机上运行串口调试助手(波特率 115200、1 位停止位、无校验位、无硬件流控制),观察实验现象。注意选择上Use Microlib。
七、 实验结果:
八、 心得体会 通过本次实验,我学到了很多知识,学习了通过实验掌握 STM32
A/D 转换器的功能与作用,掌握 STM32A/D 转换器的配置与使用,感谢老师的指导和同学的帮助
猜你喜欢
- 2024-01-17 在纪检干部教育整顿交流研讨会上发言(2024年)
- 2024-01-09 2024年度某国企纪检干部在主题教育暨教育整顿学习研讨会上发言(全文)
- 2024-01-09 纪检干部在全市思想政治工作座谈会上交流发言(精选文档)
- 2024-01-09 XX国企纪检干部在主题教育暨教育整顿学习研讨会上发言(公司剖析问题)(完整)
- 2024-01-06 2024年公司纪检工作总结及下一步工作计划
- 2024-01-03 2024年(合集)纪检员个人工作总结范本
- 2024-01-02 2024年某国企纪检工作总结及2024年工作计划(党风廉政建设和反腐败)
- 2023-12-31 2024年公司纪检工作工作完成情况及2024年工作计划【优秀范文】
- 2023-12-30 纪检干部述职述廉工作报告
- 2023-12-29 2024纪检干部演讲稿:履职尽责担使命热血青春铸忠诚
- 搜索
-
- 【年轻人与老年人】 年轻人能玩老年妇 01-18
- 2020年1月国开(中央电大)学前教育专 09-22
- 纪检委员一对一谈心谈话记录(完整) 12-22
- 社区活动室管理制度 06-05
- 学习《长松组织系统》的心得体会 04-18
- 党支部落实全面从严治党主体责任报告 07-09
- 2021国家开放大学电大专科《学前儿童艺 11-07
- 关于打击电信诈骗犯罪活动工作总结 06-24
- 纪检委员一对一谈心谈话记录(全文完整 11-23
- [班主任年终工作总结]最精彩的班主任发 12-31
- 网站分类
-
- 标签列表
-