主要是利用keil5的环境进行编程
前前后后也用过一点cubeide但是我发现我对管脚的各个功能和高低电平并没有那么熟悉,这是我现在研一在师哥的帮助下做的幅值频率可调的正弦波信号。以下主要发表一下自己的个人学习成果并附程序。如果有什么不对的地方望各位指正。
特别鸣谢:刘欢齐师兄
现在ad9954的使用手册是纯英文版的,只需百度搜索中文版就可以查看中文版,当然有一部分可能翻译的并不准确。
本次项目主要利用到9954.c中的Write_ASF函数来改变幅值,AD9954_SETFRE函数来改变频率,为了使用方便,我自己编写了Write_FZ幅值调节函数。
中文手册中提到的调用ASF函数时,应该先打开OSK,其中OSK又分为手动模式和自动模式,手动模式时,14,15位是没有影响的,也就是说范围是:0~0x3FFF,这将在下面的程序中有所体现,9954自己的给的例程中,ASF块的函数是只开关CS,所以我们将其中注释掉的部分反注释之后才可调用Write_ASF.
以下是程序代码:
这段函数位于主函数中:
AD9954_Init();
AD9954_SETFRE(500);
Write_FZ(1250);
while(1)
{
// KeyRead();
// Set_PointFre(Keycode, 0);
// if(_return){_return=0;LCD_Refresh_Gram();}
// KEY_EXIT();
}
该程序段位于9954.c中,write_FZ函数是我自己编写。该代码段的含义是用户只需要输入自己想要的幅值(十进制)即可,不需要在调用write_ASF的时候输入一个十六进制数来调整幅值。stm32中可以强制转换double和十六进制。
void Write_FZ(double a)
{
double b=3.2766;
double c;
u16 f;
c = a*b;
f = (u16)c;//强制转换
Write_ASF(f);
}
void Write_ASF(u16 factor) //2ASK
{
AD9954_CS = 0;
AD9954_SENDBYTE(0x00);
AD9954_SENDBYTE(0x02);
AD9954_SENDBYTE(0x00);
AD9954_SENDBYTE(0x20);
AD9954_SENDBYTE(0x40);
AD9954_SENDBYTE(0X05);
AD9954_SENDBYTE(0X30);
AD9954_SENDBYTE(0X00);
AD9954_SENDBYTE(0x02);
AD9954_SENDBYTE(factor >> 8);
AD9954_SENDBYTE(factor);
AD9954_CS = 1;
UPDATE();
}
这样就可以获得一个幅值和频率可调的正弦波信号。接下来可能会深度学习H7开发板或者是AD9954中AM调制或者FM调制,理论上来说利用AM调制正弦波是可以获得一个要求的五峰波。
第一次写博客,有不足的地方望各位指正。