单片机产品设计与调试-基于STM32F1xx机型和HAL库函数 课件 任务7.3 程序设计与调试_第1页
单片机产品设计与调试-基于STM32F1xx机型和HAL库函数 课件 任务7.3 程序设计与调试_第2页
单片机产品设计与调试-基于STM32F1xx机型和HAL库函数 课件 任务7.3 程序设计与调试_第3页
单片机产品设计与调试-基于STM32F1xx机型和HAL库函数 课件 任务7.3 程序设计与调试_第4页
单片机产品设计与调试-基于STM32F1xx机型和HAL库函数 课件 任务7.3 程序设计与调试_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

单片机产品设计与制作

(stm32机型)石梅香项目7、利用DAC实现LED亮度控制任务7.3程序设计与调试总目录1项目1、利用GPIO和位带操作实现温度报警

2项目2、利用SysTick实现温度报警与控制

3项目3、利用按键查询实现参数设定及显示

4项目4、利用外部中断实现工件计数显示

5项目5、利用定时器实现直流电动机PWM调速6项目6、利用计数器实现工件计数显示和打包控制

7项目7、利用DAC实现LED亮度控制8项目8、利用ADC实现土壤湿度采集

项目总目标项目总目标具体工作任务利用STM32内部DAC控制LED亮度。亮度值可由按键设定。请进行方案设计、器件选型、电路和程序设计,并完成软硬件调试。子目录7项目7、利用外部中断实现工件计数及显示

7.1任务7.1 认识STM32单片机的DAC7.2任务7.2 方案及电路设计7.3任务7.3 程序设计7.4任务7.4 软硬件深入(七)任务7.3程序设计与调试一、任务要求1、能根据任务需求绘制程序流程图;2、能够读懂程序并根据需求变化对DAC程序进行适应性修改分组讨论要利用DAC实现LED亮度控制任务,程序大致应该完成哪些工作。讨论与发言程序流程设计图7.3.1单通道、查询法程序流程程序布局程序框架如图7.3.2所示,可从之前的工程复制而来,注意:(1)HARDWARE文件夹中需要增加一个DAC文件夹,内有dac.c和dac.h文件。(2)修改工程名为:Test_DAC。(3)Project窗口的HALLIB下应增加stm32f1xx_dma.c、stm32f1xx_dac_ex.c、stm32f1xx_dac.c文件。(4)Project窗口的HARDWARE下应有dac.c。(5)Options中的包含路径中应包含DAC文件夹。(1)第4行定义变量DAC_Handler,其类型为DAC_HandleTypeDef,用于DAC的各种操作。其具体内容参见表7.3.1。(2)第5行定义变量DAC_OUT_Value,用于存储准备送到DAC数据保持寄存器DHR的数据,该数据的大小决定了DAC输出电压。(3)第10行调用函数DAC_Init()对DAC初始化。该函数具体内容见表7.3.1。(4)第13~20行用于测试DAC_OUT_Value送不同数值时对应的模拟电压输出。其中:(5)第13~17行用于向DAC_OUT_Value送不同数值。(6)第18、20行调用库函数HAL_DAC_SetValue()向两个DAC通道传送待转换数值。主程序设计与调试DAC程序设计DAC程序设计DAC操作相关库函数1、DAC操作变量数据类型:

DAC_HandleTypeDef

typedefstruct{DAC_TypeDef*Instance;

//待配置设备名,

DAC或DAC1,注意DAC、DAC2和DAC1都用一个名字

__IO

HAL_DAC_StateTypeDefState;

//状态

HAL_LockTypeDef

Lock;

//锁定

DMA_HandleTypeDef*DMA_Handle1;

//通道1DMA操作变量

DMA_HandleTypeDef*DMA_Handle2;

//通道2DMA操作变量

__IO

uint32_t

ErrorCode;

//错误代码……

……;

//其它}DAC_HandleTypeDef

;2、DAC赋值函数:

HAL_DAC_SetValue(&DAC操作变量,通道号,数据对齐格式,数据)原型:HAL_StatusTypeDef

HAL_DAC_SetValue(DAC_HandleTypeDef

*hdac,uint32_t

Channel,

uint32_t

Alignment,

uint32_t

Data)功能:将数据Data送到hdac和Channel指定的DAC通道,数据格式是Alignment入口参数:(1)hdac,指出是哪个DAC操作变量,其数据类型为

DAC_HandleTypeDef,结构体变量(2)Channel,指出是哪个通道,其取值为:DAC_CHANNEL_1或DAC_CHANNEL_2(3)Alignment,指出数据对齐格式,其取值为:DAC_ALIGN_12B_R(12位右对齐)、DAC_ALIGN_12B_L(12位左对齐)、DAC_ALIGN_8B_R(8位右对齐)(4)Data,待传送数据,数据类型为

uint32_t返回值:类型为HAL_StatusTypeDef,返回结果有4种:HAL_OK=0x00;

HAL_ERROR=0x01;

HAL_BUSY=0x02;

HAL_TIMEOUT=0x033、DAC初始化函数:

HAL_DAC_Init(&DAC操作变量)函数原型:HAL_StatusTypeDef

HAL_DAC_Init

(DAC_HandleTypeDef*hdac)功能:(1)按照变量hdac的设置,初始化DAC,其数据类型为

DAC_HandleTypeDef,结构体变量(2)调用__weakvoidHAL_DAC_MspInit(DAC_HandleTypeDef

*hdac)

库函数(3)返回操作结果入口参数:hdac,指出如何进行DAC初始化,其数据类型为

DAC_HandleTypeDef,结构体变量返回值:

同函数HAL_DAC_SetValue()DAC程序设计DAC操作相关库函数4、DAC初始化隐性调用函数:HAL_DAC_MspInit(DAC_HandleTypeDef*hdac)原型:__weak

voidHAL_DAC_MspInit(DAC_HandleTypeDef*hdac)功能:针对DAC操作变量hdac,执行本函数的内容说明:本函数在库中被定义为__weak(弱)型,函数内容可根据用户需要自定义返回值:

空5、DAC通道设置变量数据类型:DAC_ChannelConfTypeDef

typedefstruct{ uint32_t

DAC_Trigger;

//触发方式,有以下取值:DAC_TRIGGER_NONE(不需要外部触发)、//DAC_TRIGGER_EXT_IT9(外部中断9触发)、//DAC_TRIGGER_T2_TRGO(TIM2TRGO事件触发)、//DAC_TRIGGER_T4_TRGO(TIM4TRGO事件触发)、//DAC_TRIGGER_T5_TRGO~DAC_TRIGGER_T8_TRGO(TIM5~TIM8TRGO事件触发)uint32_t

DAC_OutputBuffer;

//DAC输出缓冲器,有两种取值:DAC_OUTPUTBUFFER_ENABLE(允许)、

//DAC_OUTPUTBUFFER_DISABLE(禁止)}DAC_ChannelConfTypeDef;6、DAC通道设置函数:HAL_DAC_ConfigChannel(&DAC操作变量,&DAC通道设置变量,通道号)函数原型:HAL_StatusTypeDefHAL_DAC_ConfigChannel(DAC_HandleTypeDef*hdac,DAC_ChannelConfTypeDef*sConfig,uint32_tChannel)功能:按照sConfig的设置,对hdac和Channel指定的DAC通道进行设置入口参数:hdac,指出是哪个DAC操作变量,数据类型为DAC_HandleTypeDef,结构体变量sConfig:指出如何进行通道配置,数据类型为DAC_ChannelConfTypeDef,结构体变量Channel:指出是哪个通道,取值为DAC_CHANNEL_1或DAC_CHANNEL_2返回值:

同函数HAL_DAC_SetValue()7、DAC启动函数:HAL_DAC_Start(&DAC操作变量,通道号)函数原型:HAL_StatusTypeDefHAL_DAC_Start(DAC_HandleTypeDef*hdac,uint32_tChannel)功能:(1)给指定的DAC通道上电

(2)如果是软件触发,则发一个触发信号,将DHR中的数据装入DOR入口参数:hdac,指出是哪个DAC操作变量,数据类型为DAC_HandleTypeDef,结构体变量Channel:指出是哪个通道,取值为DAC_CHANNEL_1或DAC_CHANNEL_2返回值:同函数HAL_DAC_SetValue()8、DAC停止函数:HAL_DAC_Stop(&DAC操作变量,通道号)函数原型:HAL_StatusTypeDefHAL_DAC_Stop(DAC_HandleTypeDef*hdac,uint32_tChannel)功能:给指定的DAC通道断电,使其停止工作入口参数:hdac,指出是哪个DAC操作变量,数据类型为DAC_HandleTypeDef,结构体变量Channel:指出是哪个通道,取值为DAC_CHANNEL_1或DAC_CHANNEL_2

返回值:同函数HAL_DAC_SetValue()DAC程序设计DAC操作相关库函数7、DAC启动函数:HAL_DAC_Start(&DAC操作变量,通道号)函数原型:HAL_StatusTypeDefHAL_DAC_Start(DAC_HandleTypeDef*hdac,uint32_tChannel)功能:(1)给指定的DAC通道上电

(2)如果是软件触发,则发一个触发信号,将DHR中的数据装入DOR入口参数:hdac,指出是哪个DAC操作变量,数据类型为DAC_HandleTypeDef,结构体变量Channel:指出是哪个通道,取值为DAC_CHANNEL_1或DAC_CHANNEL_2返回值:同函数HAL_DAC_SetValue()8、DAC停止函数:HAL_DAC_Stop(&DAC操作变量,通道号)函数原型:HAL_StatusTypeDefHAL_DAC_Stop(DAC_HandleTypeDef*hdac,uint32_tChannel)功能:给指定的DAC通道断电,使其停止工作入口参数:hdac,指出是哪个DAC操作变量,数据类型为DAC_HandleTypeDef,结构体变量Channel:指出是哪个通道,取值为DAC_CHANNEL_1或DAC_CHANNEL_2

返回值:同函数HAL_DAC_SetValue()软硬件调试(1)修改程序,向变量DAC_OUT_Value送0。编译生成后下载到开发板。(2)用万用表测量PA4和PA5引脚,应该输出0V左右的电压。(3)修改程序,向变量DAC_OUT_Value送1000。编译生成后下载到开发板。(4)用万用表测量PA4和PA5引脚,应该输出0.8V左右的电压。(5)修改程序,向变量DAC_OUT_Value分别送2482、3000、4095,应该在PA4和PA5上得到相应的电压。(6)按照自己的想法给DAC_OUT_Value赋值,运行后测一下输出电压是否和自己计算的一样。(7)修改程序,测试12位右对齐、12位左对齐和8位右对齐格式下的输出。说一说它们的区别。(8)进入在线调试模式,设断点运行,观察在各个断点处DHR和DOR寄存器内容的变化,体会DAC的工作过程。(9)想一想如果DAC采用软件触发,程序该怎么编写?试一下。软硬件调试(1)修改程序,向变量DAC_OUT_Value送0。编译生成后下载到开发板。(2)用万用表测量PA4和PA5引脚,应该输出0V左右的电压。(3)修改程序,向变量DAC_OUT_Value送1000。编译生成后下载到开发板。(4)用万用表测量PA4和PA5引脚,应该输出0.8V左右的电压。(5)修改程序,向变量DAC_OUT_Value分别送2482、3000、4095,应该在PA4和PA5上得到相应的电压。(6)按照自己的想法给DAC_OUT_Value赋值,运行后测一下输出电压是否和自己计算的一样。(7)修改程序,测试12位右对齐、12位左对齐和8位右对齐格式下的输出。说一说它们的区别。(8)进入在线调试模式,设断点运行,观察在各个断点处DHR和DOR寄存器内容的变化,体会DAC的工作过程。(9)想一想如果DAC采用软件触发,程序该怎么编写?试一下。LED亮度控制程序设计与调试要求:用外部中断0和外部中断3接收加键和减键输入,改变

温馨提示

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

评论

0/150

提交评论