DAC+定时器 生成正弦波,三角波
正弦波生成
配置如下
DAC触发 trigger是由TIM2事件触发。
TIM2配置方式
/** * 生成正弦波数据点函数 * @param NPoints �???个周期内的点�??? * @param VMaxRange 输出的电压最大�?�,取�?�范�???0~3.3V * @param SineWaveTable 存放生成的数据点 */ void SineWaveGen(uint32_t NPoints, float VMaxRange, uint16_t* SineWaveTable) { #ifndef PI #define PI 3.14159265358979323846 #endif int b = 0; double radian = 0; // 弧度 double setup = 0; // 弧度和弧度之间的大小 double voltage = 0; // 输出电压 setup = (2 * PI) / NPoints; // 两点之间的间�??? while (b< NPoints) { voltage = VMaxRange / 2.0 * (sin(radian) + 1.0); // 计算电压 SineWaveTable[b] = (uint16_t)(voltage * 4096 / 3.3); // 电压转为DAC数�?? radian += setup; // 下一个点的弧�??? b++; } }
int main()
{
SineWaveGen(100,3.3,SineWaveTable);//生成sin函数的点
HAL_TIM_Base_Start(&htim2);
HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_1, (uint32_t *)SineWaveTable, 100, DAC_ALIGN_12B_R);
while(1)
{
}
}
三角波
可以在配置中生成 三角波和噪声波,4095可以改幅度,同样是tim2触发tim2配置同上
然后写开始函数
int main() { HAL_TIM_Base_Start(&htim2); HAL_DAC_Start(&hdac, DAC_CHANNEL_1); while(1) { } }
看示波器生成波形