完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
回复本帖可获得 3 分积分奖励! 每人限 1 次(中奖概率 90%) |
看了AD5174的手册就开始写了个程序,研究了好长时间还是没有结果,希望大神们帮忙!程序如下:<
#include "STM32f10x.h" #ifndef __AD5174_H__ #define __AD5174_H__ #define CHANNEL_1 0 #define CHANNEL_2 1 extern void AD5174_init(void);// extern void write_data_to_AD5174(float data_R);//写数据到AD5174 #endif < #include "stm32f10x.h" #include "stdio.h" #include "AD5174.h" #include "delay.h" static void AD5174_SPI_Pin_init(void); void AD5174_init(void); void write_HEX_to(u16 data_R); #define SYNC_LOW() GPIO_ResetBits(GPIOB,GPIO_Pin_10);//SYNC拉低 #define SYNC_HIGH() GPIO_SetBits(GPIOB,GPIO_Pin_10);//SYNC拉高 void AD5174_SPI_Pin_init(void)//SPI2,PB10为芯片SYNC脚 { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;//SPI的SCLK、MOSI、MISO引脚设置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitStructure); /*SYNC引脚的设置(PB10)*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_SetBits(GPIOB,GPIO_Pin_10); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;//SPI的通信方式,TX-->发送数据;RX-->接受数据 SPI_InitStructure.SPI_Mode = SPI_Mode_Master;//设置SPI的主从模式,Master(主模式),Slave(从模式) SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;//8位还是16位帧格式选这项 SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;//设置时钟极性,即时钟空闲状态时为高‘high’还是低‘low’ SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;//设置时钟相位,即第几个跳变沿开始传输数据 SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//设置NSS信号又硬件还是软件来控制SPI_NSS_Soft软件控制 SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;//SPI波特率预分频值,9MHz SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;//数据传输顺序,MSB(高位在前)为在前还是LSB(低位在前)为在前 SPI_InitStructure.SPI_CRCPolynomial = 7;//设置CRC校验,提高通信可靠性,大于1即可 SPI_Init(SPI2,&SPI_InitStructure); SPI_Cmd(SPI2,ENABLE);//使能SPI2 } void AD5174_init(void)//把上边初始化函数重新封装 { AD5174_SPI_Pin_init(); } void write_HEX_to(u16 data_R) { SYNC_HIGH(); delay_us(2); SYNC_LOW(); //产生下降沿,选中AD5174 delay_us(2); SPI_I2S_SendData(SPI2, data_R);//发送数据 while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);//等待发送结束 while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET); delay_us(200); SYNC_HIGH(); //拉高同步信号,AD5174执行指令 delay_us(2); } 以上就是我写的AD5174程序,主函数就不写了,就一个初始化和循环void write_HEX_to(u16 data_R)的函数。帮忙看一下。我用示波器看时序是没有问题的,测数字电位器两端的电阻一直是中间位置的数值。求帮忙。 |
|
相关推荐
10个回答
|
|
回帖奖励 +3 分积分
电位器本身的问题,或者初始化问题
最佳答案
|
|
|
|
顶一下!!!大神们帮帮忙
|
|
|
|
|
|
|
|
回帖奖励 +3 分积分 |
|
|
|
SPI是没有问题,只是不知道我写的那个芯片的代码是不是正确的 |
|
|
|
你用过SPI接口的数字电位器吗? |
|
|
|
回帖奖励 +3 分积分
电位器本身的问题,或者初始化问题
|
|
|
|
|
|
|
|
对着示波器看命令数据,看采的对不对慢慢找原因
|
|
|
|
回帖奖励 +3 分积分
你好,你这边解决了吗,我也是用数字电位计,但是w一直处于中间位置,控制不了
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
OV7670摄像头使用串口发送数据到另一个板子上的lcd,出现花屏
420 浏览 1 评论
391 浏览 0 评论
345 浏览 0 评论
STM32CUBEMX(12)--IIC,12864OLED(0.96寸)移植
560 浏览 0 评论
STM32CUBEMX(5)--自定义红外NEC解码,定时器TIM捕获方式
536 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-14 04:18 , Processed in 0.787113 second(s), Total 64, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号