【24电赛day3】DAC+DMA+TIM产生正弦波

#以下所有代码基于STM32G431CBU6和CubeMX联合开发

1.CubeMX配置

1.1打开RCC和SYS

RCC配置为HSE(外部高速时钟)里面的Crystal/Ceramic Resonater(晶振)

时钟树配置

1.2配置TIM2

更改时钟源(clock source)为internal clock,Trigger Event(触发事件)为update Event(更新事件),自动重装载寄存器(ARR)设置为85-1,因为主频170MHZ,170M/85-1+1=2M。选取100个数据点,2M/100为20KHZ的频率

1.3配置DAC和DMA

打开DAC1的OUT1并设置为仅连接到外部引脚,然后在参数设置中将触发(Trigger)改为TIM2输出事件触发,

然后跳转到DMA设置中进行如下配置

注意一定要为循环模式

1.4生成MDK文件或者其他

2.代码编写(写在begin end里面,以防刷新掉)

2.1相关常量宏定义

uint16_t SineWaveTable[100];
#define POINTS 100

2.2生成正弦波数据点函数

void SineWaveGen(uint32_t NPoints, float VMaxRange, uint16_t* SineWaveTable)
{
#ifndef PI
#define PI 3.14159265358979323846
#endif

	int    i       = 0;
	double radian  = 0;  // 弧度
	double setup   = 0;  // 弧度和弧度之间的大小
	double voltage = 0;  // 输出电压

	setup = (2 * PI) / NPoints;  // 两点之间的间距

	while (i < NPoints)
	{
		voltage = VMaxRange / 2.0 * (sin(radian) + 1.0);              // 计算电压
		SineWaveTable[i] = (uint16_t)(voltage * 4096 / 3.3);          // 电压转为DAC数值
		radian += setup;                                              // 下一个点的弧度
		i++;
	}
}

2.3主函数中调用

在while(1)循环前面进行开启操作

//产生20KHz,100mV电压的正弦波
	HAL_TIM_Base_Start(&htim2); 
    HAL_DAC_Start(&hdac1, DAC_CHANNEL_1);
	SineWaveGen(POINTS,1,SineWaveTable);//无分频,重载值85,170M/85=20M,一周期100点20KMHz
	HAL_DAC_Start_DMA(&hdac1, DAC_CHANNEL_1, (uint32_t *)SineWaveTable, POINTS, DAC_ALIGN_12B_R);
//正弦波幅度在函数中进行更改,频率根据时钟树和定时器分频数和自动重装载值进行更改

 

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Hal Dac dma 是指硬盘管理器 (Hal)、直接访问控制器 (Dac) 和直接内存访问 (dma) 技术。在计算机系统中,硬盘管理器 (Hal) 是负责管理硬盘驱动器的软件或硬件组件,它能够管理硬盘的存储和读写操作。直接访问控制器 (Dac) 是一种允许系统直接与外部设备进行数据传输的硬件接口,它能够控制数据的输入和输出,提高系统的数据传输效率。直接内存访问 (dma) 技术是一种数据传输方式,它允许外部设备直接访问计算机的内存,从而减轻了中央处理器的负担,提高了数据传输速度。 在计算机应用中,Hal Dac dma 技术起到了重要的作用。硬盘管理器 (Hal) 可以管理硬盘的存储和读写操作,保证数据的安全和可靠性。直接访问控制器 (Dac) 能够实现高效的数据传输,提高了外部设备与计算机系统的互联互通速度。直接内存访问 (dma) 技术通过减少中央处理器的负担,提高了数据传输效率和系统的整体性能。 通过 Hal Dac dma 技术,计算机系统可以更高效地处理大量数据传输任务,提高整体的数据处理能力。无论是在个人计算机还是服务器等大规模计算环境中,Hal Dac dma 技术都能够提供卓越的数据传输性能和稳定性,对于提升计算机系统的运行效果具有重要意义。 总之,Hal Dac dma 技术是在计算机系统中应用广泛的技术,它能够提高数据传输速度和效率,保证数据的安全和可靠性,对于提升计算机系统的整体性能起到了关键作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linzaii

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值