STM32&AD9833信号发生器代码
单片机源程序如下:
- #include "stm32f10x.h"
- #include "led.h"
- #include "ad9833.h"
- #include "systemconfig.h"
- #include "key.h"
- #include "oled.h"
- #include "bsp_i2c_gpio.h"
- #include "delay.h"
- #include "usart.h"
- #include "timer.h"
- void Delay(u32 count)
- {
- u32 i=0;
- for(;i<count;i++);
- }
- int main(void)
- {
- u8 i;
- uint16_t pwm = 400;
- LED_Init();
- delay_init();
- OLED_Init(); /* OLED初始化 */
- uart_init(115200);
- SystemConfiguration(); //系统初始化
- TIM3_PWM_Init(899,0); //不分频。PWM频率=72000000/900=80Khz
- AD9833_Init_GPIO(); //AD9833 GPIO 初始化
- // AD9833_WaveSeting(8000000.5,0,TRI_WAVE,0 );//1.0005KHz,频率寄存器0,三角波输出 ,初相位0
- /* AD9833_WaveSeting(5000,0,SQU_WAVE,90); //5KHz, 频率寄存器0,方波输出 ,初相位90 */
- /* AD9833_WaveSeting(100000,0,SIN_WAVE,0 );//100KHz, 频率寄存器0,正弦波输出 ,初相位0 */
-
-
- AD9833_WaveSeting(10000,0,SIN_WAVE,0 );
- AD9833_AmpSet(100); //设置幅值,幅值最大 255
-
- u16 f=1000;
- u16 l=100;
- u8 flag;u8 flag1;
- u8 t = '0';
- u16 b;
- u16 m=0;
- u16 a=0;
- while(1)
- {
- TIM_SetCompare2(TIM3,pwm);
- OLED_Clear();
- OLED_DisplayUpdate();
- t = KEY_Scan(); //得到键值
- switch(t) //波形检测
- {
- case '1':t='0';SystemConfiguration(); AD9833_WaveSeting(f,0,TRI_WAVE,0 );break;//说明PB4接收到低电平,第一行第一列对应第一个按键
- case '5':t='0';SystemConfiguration(); AD9833_WaveSeting(f,0,SQU_WAVE,90);break;
- case '9':t='0';SystemConfiguration(); AD9833_WaveSeting(f,0,SIN_WAVE,0 );break;
- case '2':t='0';f--;SystemConfiguration(); AD9833_WaveSeting(f,0,SIN_WAVE,0 );break;
- case '3':t='0';f=f-10;SystemConfiguration(); AD9833_WaveSeting(f,0,SIN_WAVE,0 );break;
- case '4':t='0';f=f-100;SystemConfiguration(); AD9833_WaveSeting(f,0,SQU_WAVE,0 );break;
- case '6':t='0';f++;SystemConfiguration(); AD9833_WaveSeting(f,0,SIN_WAVE,0 );break;
- case '7':t='0';f=f+10;SystemConfiguration(); AD9833_WaveSeting(f,0,SIN_WAVE,0 );break;
- case '8':t='0';f=f+100;SystemConfiguration(); AD9833_WaveSeting(f,0,SIN_WAVE,0 );break;
- case 'f':t='0';pwm=pwm-10; break;
- case 'g':t='0';pwm=pwm+10; break;
- default:break;
- }
- }

芯片解密