stm23f407控制DAC8550输出直流信号(hal库)

 一、开发环境

硬件:STM32F407 核心开发板

单片机:STM32F407ZGT6

Keil版本:5.24.2.0

STM32CubeMX版本:6.12.0

 二、配置CubeMX

1. 选择时钟源

2. 配置时钟

​3. 使能Debug功能:Serial Wire

4. HAL库时基选择:SysTick

5. GPIO配置:如图。

6. 配置工程参数:在Project标签页中,配置项目名称和位置,选择工具链MDK-ARM。

7. 生成代码:在Code Generator标签页中,配置工程外设文件与HAL库,勾选头文件.c和.h文件分开,然后点击Project > Generate Code生成代码。

三、代码实现与部署

1. 添加 dac8550.c 和 dac8550.h 文件(忘了在哪儿找的资源)

dac8550.c

#include "DAC8550.h"
#include "stm32f4xx_hal.h"
#include "main.h"
#include "gpio.h"

// 芯片手册显示存在:±2mV~±12mV的零码误差,模块本身4倍放大,误差为:±8mV~±48mV
// 零码误差测量,使ZeroCode_Error = 0,模块输出0V,如果测量为-5mV,即将ZeroCode_Error幅值为5
int16_t ZeroCode_Error = 0;	


//-----------------------------------------------------------------
// void DAC8550_GPIO_Init(void)
//-----------------------------------------------------------------
//
// 函数功能: DAC8550引脚初始化
// 入口参数: 无
// 返回参数: 无
// 全局变量: 无
//
//-----------------------------------------------------------------
void DAC8550_GPIO_Init(void)
{
//	GPIO_InitTypeDef GPIO_InitStructure;

//	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);		// 开启GPIOB时钟

//	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_15;
//	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;				// 设置为上拉输入
//	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;				// 时钟50MHz
//	GPIO_Init(GPIOB,&GPIO_InitStructure);										// 初始化	
	DAC8550_SYNC_H;
}


//-----------------------------------------------------------------
// void DAC8550_Write_Reg(uint32_t data)
//-----------------------------------------------------------------
//
// 函数功能: DAC8550写数据
// 入口参数: 无
// 返回参数: 无
// 全局变量: 无
//
//-----------------------------------------------------------------
void DAC8550_Write_Reg(uint32_t data)
{
	uint8_t i;
	
	DAC8550_SYNC_L;
	for(i=0;i<24;i++)
	{
		DAC8550_SCLK_H;
		if(data&0x800000)
		{
			DAC8550_DIN_H;
		}
		else
		{
			DAC8550_DIN_L;
		}
		DAC8550_SCLK_L;
		data<<=1;
	}
	DAC8550_SYNC_H;
}


//-----------------------------------------------------------------
// void DAC8550_Set_Volatile(float Vol)
//-----------------------------------------------------------------
//
// 函数功能: 设置DAC8550的输出电压
// 入口参数: data:输出电压的数字量
// 返回参数: 无
// 全局变量: 无
//
//-----------------------------------------------------------------
void DAC8550_Set_Volatile(float Vol)
{
	float buff;
	int16_t Digital;
	
	buff = Vol + ZeroCode_Error;
	
	if(buff>5000)
	{
		buff=5000;
	}
	else if(buff<-5000)
	{
		buff=-5000;
	}
	
	Digital = buff/10000*65535;
	DAC8550_Write_Reg((uint32_t)((uint16_t)Digital));
}


//-----------------------------------------------------------------
// End Of File
//-----------------------------------------------------------------

dac8550.h

#ifndef _DAC8550_H_
#define _DAC8550_H_


#include "stm32f4xx_hal.h"
#include "main.h"
#include "gpio.h"


//-----------------------------------------------------------------
// 引脚声明
//-----------------------------------------------------------------
#define DAC8550_SYNC_L      HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET)
#define DAC8550_SYNC_H     	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET)
#define DAC8550_SCLK_L     	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET)
#define DAC8550_SCLK_H     	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET)
#define DAC8550_DIN_L      	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_RESET)
#define DAC8550_DIN_H     	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_SET)


//-----------------------------------------------------------------
// 外部函数声明
//-----------------------------------------------------------------
extern void DAC8550_GPIO_Init(void);
extern void DAC8550_Write_Reg(uint32_t data);
extern void DAC8550_Set_Volatile(float Vol);


#endif
//-----------------------------------------------------------------
// End Of File
//-----------------------------------------------------------------

2. main.c增加代码:添加头文件 #include "dac8550.h",然后就可以调用函数输出电压啦。

#include "dac8550.h"


DAC8550_Set_Volatile(-5000);    //输出-5000mV
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32F407控制DAC8550芯片时,可以使用以下步骤: 1. 首先,需要在代码中包含相关的头文件,如引用\[1\]所示。这些头文件包含了对DAC和其他相关外设的定义和函数声明。 2. 接下来,需要初始化DAC通道1,可以使用Dac1_Init函数进行初始化。这个函数会配置DAC的时钟和GPIO引脚等参数。 3. 通过调用Dac1_Set_Vol函数,可以设置通道1的输出电压。这个函数会将要输出的电压值传递给DHRx寄存器,从而控制DAC的输出。具体的电压值需要根据DAC8550的规格来确定。 需要注意的是,DAC8550是一个12位的DAC芯片,因此在设置输出电压时,需要将电压值转换为对应的12位数值。另外,还需要根据具体的电路连接情况,配置GPIO引脚和时钟等参数。 总结起来,控制DAC8550的步骤包括引入相关头文件、初始化DAC通道1和设置输出电压。具体的代码实现可以参考相关的开发文档和例程。 #### 引用[.reference_title] - *1* *2* [【stm32f407】DAC实验](https://blog.csdn.net/XiaoXiaoPengBo/article/details/73277853)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [STM32F407控制舵机](https://blog.csdn.net/Ievn_Hare/article/details/109067964)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值