使用STM32F030F4P6进行AD9833频率控制

时间:2018-09-30 13:30:51

标签: function generator stm32

我正在使用STM32F030F4P6和Stm32Cube运行AD9833信号发生器。 我可以生成信号,但不能更改频率。在Analog Devices App note中有示例:

Example

在这个例子中,我编写了这样的代码:

void AD9833_SetFRQ(float FRQ) {
    uint32_t freq=0;
    uint32_t freq0=0;
    uint32_t freq1=0;

    freq=(int)(((FRQ*pow(2,28))/FMCLK)+1); // Tuning Word
    freq0=(freq&0x3fff)|(1<<14);  // FREQ LSB
    freq1=(freq>>14)|(1<<14);     // FREQ MSB

    AD9833_Reset();

    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);
    HAL_SPI_Transmit(&hspi1,(uint8_t*)&(freq0),1,10);
    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);

    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);
    HAL_SPI_Transmit(&hspi1,(uint8_t*)&(freq1),1,10);
    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);

    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);
    HAL_SPI_Transmit(&hspi1,(uint8_t*)&(A1),1,10);
    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);

    AD9833_Set();
}

我的数据输出与模拟设备示例完全相同,如您在逻辑分析仪图像中所见:

Logic1

Logic2

仍然没有机会更改频率。 有什么问题吗?

1 个答案:

答案 0 :(得分:0)

您确定控制位(例如DB13或DB14 DB15)正确写入了吗? 另外,最后是否要重置切换?

检查命令序列的解释部分 https://www.analog.com/media/en/technical-documentation/application-notes/AN-1070.pdf