实 验 报 告
课程名称: 微型计算机控制技术 时间: 20201105 点: D203
班级: 2017级机制3班 姓名: 杨帆 学号: 171031010304
实验项目名称: AD 转换器实验
实验指导教师: 赵保华 实验成绩评定:
实验目
ü通实验掌握 STM32 AD 转换器功作
掌握 STM32AD 转换器配置
二 实验设备
ü硬件:信盈达STM32 实验台STlink 仿真器套件PC 机串口连接线
软件:KEIL for ARM(MDK)集成开发环境串口调试助手Windows 7810XP
三 实验容
利 ADC 第 1 通道信盈达CotexM3 实验台单圈电位器电压值作 AD 转换采连续转换模式ADC 转换结果通串口发送PC显示
四 实验原理
五 软件程序设计
1程序完成工作:
移植:
1)移植核定时器实现精确延时sys_tickc sys_tickh
配置ADC
配置 GPIO 口 PA1配置 ADC 第 1 采样通道
设置 ADC ADC_IN1 设置连续转换模式
配置串口相关发送功
利串口发送 AD 转换结果
3 观察实验结果
VER+VDDSVERF—GND跳线帽连起旋转电位器 AD 输入旋钮串口输出数值断变化
367 实验参考程序
mainc参考程序:
#include stm32f10xh
#include stdioh
#include uarth
#include adch
#include sys_tickh
#include NVICh
int main(void)
{
NVIC_Config() NVIC中断理初始化
SysTickConfig() 滴答时钟初始化实现精确延时
UART1_Init() 串口1初始化
Adc_Init() ADC初始化
while(1)
{
Adc_test() ADC测试函数印滑动变阻器电压值
Delay_ms(2000)精确延时2000ms
}
}
adcc参考程序:
#include stm32f10xh
#include adch
#include sys_tickh
#include stdioh
adc初始化
void Adc_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure
ADC_InitTypeDef ADC_InitStructure
开启GPIO口ADC时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1ENABLE)
ADC采样分频 728 9
RCC_ADCCLKConfig(RCC_PCLK2_Div8)
设置ADC输入脚PA1
GPIO_InitStructureGPIO_Pin GPIO_Pin_1
GPIO_InitStructureGPIO_Mode GPIO_Mode_AIN模拟输入引脚
GPIO_Init(GPIOA&GPIO_InitStructure)
ADC_InitStructureADC_Mode ADC_Mode_IndependentADC独立模式
ADC_InitStructureADC_ContinuousConvMode DISABLE单次循环模式连续循环模式 DISABLE单次循环
ADC_InitStructureADC_ScanConvMode DISABLE 通道单通道 DISABLE单通道
ADC_InitStructureADC_ExternalTrigConv ADC_ExternalTrigConv_None事件触发软件触发
ADC_InitStructureADC_DataAlign ADC_DataAlign_Right数右齐 低12位
ADC_InitStructureADC_NbrOfChannel 1序转换规组通道数目
ADC_Init(ADC1&ADC_InitStructure) 相关寄存器赋值
ADC_Cmd(ADC1ENABLE) 开启ADC1
ADC_ResetCalibration(ADC1) 复位校准初始化校准寄存器
while(ADC_GetResetCalibrationStatus(ADC1) SET)
ADC_StartCalibration(ADC1) AD校准
while(ADC_GetCalibrationStatus(ADC1) SET)
}
ADC值
void Get_adcvalue(u8 channelu16 *value)
{
设置指定ADC规组通道序列采样时间
ADC_RegularChannelConfig(ADC1channel1ADC_SampleTime_239Cycles5)
软件启动ADC转换
ADC_SoftwareStartConvCmd(ADC1ENABLE)
等ADC转换完成
while(ADC_GetFlagStatus(ADC1ADC_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\ntemp)
ad_value (33*(float)temp)40960转换实际电压值
printf(f\r\nad_value)
Delay_ms(500)
}
adch参考程序:
#ifndef _ADC_H_
#define _ADC_H_
#include stm32f10xh
void Adc_Init(void)
void Get_adcvalue(u8 channelu16 *value)
void Adc_test(void)
#endif
sys_tickc参考程序
#include stm32f10xh
#include core_cm3h
#include stdioh
#include stdlibh
#include uarth
#include adch
#include sys_tickh
#include NVICh
*
static __INLINE uint32_t SysTick_Config(uint32_t ticks)
装载定时时间值
void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)
设置滴答时钟时钟频率
目:滴答时钟形成1us定时器
1us T*(1f)
T装载数
f滴答时钟运行时钟频率
1s 1000ms
1ms 1000us
1s 1000000us
1M 1000000
11M 1us
t 172M 172us
1us 72 * t
SystemCoreClock1000000 1us
SystemCoreClock100000 10us
SystemCoreClock10000 100us
SystemCoreClock1000 1ms
SysTick>CTRL | SysTick_CTRL_ENABLE_Msk开滴答时钟
SysTick>CTRL & ~SysTick_CTRL_ENABLE_Msk关闭滴答时钟
*
****************************************************
函数名:SysTickConfig
形参:
返回值:
函数功:滴答时钟初始化
****************************************************
void SysTickConfig(void)
{
配置72Mhz时钟
t 172M 172us
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK)
if(SysTick_Config(SystemCoreClock1000000) 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_tickh参考程序
#ifndef _SYS_TICK_H_
#define _SYS_TICK_H_
#include includesh
#include stm32f10xh
void SysTickConfig(void)
void Delay_us(u32 time)
void Delay_ms(u32 time)
#endif
Uarth 参考程序
#ifndef _UART_H_
#define _UART_H_
void UART1_Init(void)串口1初始化
void USART1_Echo(void)串口1回显函数
void Show_Logo(void) 终端显示LOGO
#endif
NVICc
#include NVICh
#include stm32f10xh
#include core_cm3h
****************************************************
函数名:NVIC_Config
形参:
返回值:
函数功:响应中断抢占中断分组
****************************************************
void NVIC_Config(void)响应中断抢占中断分组
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2)
}
NVICh
#ifndef _NVIC_H_
#define _NVIC_H_
void NVIC_Config(void)响应中断抢占中断分组
#endif
六 实验操作步骤
实验操作步骤
准备实验环境 STlink 仿真器连接 信盈达STM32 实验台板 JTAG 接口 实验台附带USB数线连接实验台板PC
新建工程编写程序完成软件设计
新建工程保存文件夹复制相应库文件
开发环境中新建工程配置工程选项
新建程序代码文件添加工程完成程序编码误程序载开发板 Flash 中 RESET 键复位 添加前面实验程序中uarth uartc nvich nvicc
PC 机运行串口调试助手(波特率 1152001 位停止位校验位硬件流控制)观察实验现象注意选择Use Microlib
七 实验结果:
八 心体会
通次实验学知识学通实验掌握 STM32 AD 转换器功作掌握 STM32AD 转换器配置感谢老师指导学帮助
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档