stm32-dac8532 联合开发网例程,证明DAC8532规格书中的写时序,实际是下降沿采集位信号,亲自测试8532也证明

  1. #include "dac8532.h"   
  2. #include "stm32f10x_lib.h"   
  3. #include "stm32f10x_conf.h"   
  4. #include "delay.h"   
  5.    
  6. #define DAC8532_PORT GPIOA   
  7. #define DAC8532_SCL GPIO_Pin_1//SCL   
  8. #define DAC8532_SDA GPIO_Pin_0//DIN   
  9. #define DAC8532_SYNC GPIO_Pin_2//SYNC   
  10.    
  11. #define DAC8532_SCL_1 GPIO_SetBits(DAC8532_PORT,DAC8532_SCL)   
  12. #define DAC8532_SCL_0 GPIO_ResetBits(DAC8532_PORT,DAC8532_SCL)   
  13. #define DAC8532_SDA_1 GPIO_SetBits(DAC8532_PORT,DAC8532_SDA)   
  14. #define DAC8532_SDA_0 GPIO_ResetBits(DAC8532_PORT,DAC8532_SDA)   
  15. #define DAC8532_SYNC_1 GPIO_SetBits(DAC8532_PORT,DAC8532_SYNC)   
  16. #define DAC8532_SYNC_0 GPIO_ResetBits(DAC8532_PORT,DAC8532_SYNC)   
  17.    
  18. void InitDAC8532GPIO(void)   
  19. {   
  20.     GPIO_InitTypeDef GPIO_InitStructure;   
  21.    
  22.     GPIO_InitStructure.GPIO_Pin = DAC8532_SCL|DAC8532_SDA|DAC8532_SYNC;   
  23.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   
  24.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   
  25.     GPIO_Init(DAC8532_PORT, &GPIO_InitStructure);   
  26.        
  27.     DAC8532_SYNC_1;    
  28.     DAC8532_SCL_1;   
  29. }   
  30. static void WriteDAC8532Bit0(void)   
  31. {   
  32.     DAC8532_SCL_1;   
  33.     delay_us_sys(1);//ʱ�Ӹߵ�ƽ   
  34.     DAC8532_SDA_0;//������Ч   
  35.     delay_us_sys(1);//����׼��   
  36.     DAC8532_SCL_0;//�½���   
  37.     delay_us_sys(2);//���ݱ���   
  38.     //һ��bitΪһ������Ϊ4us�ķ���   
  39. }   
  40. static void WriteDAC8532Bit1(void)   
  41. {   
  42.     DAC8532_SCL_1;   
  43.     delay_us_sys(1);//ʱ�Ӹߵ�ƽ   
  44.     DAC8532_SDA_1;//������Ч   
  45.     delay_us_sys(1);//����׼��   
  46.     DAC8532_SCL_0;//�½���   
  47.     delay_us_sys(2);//���ݱ���   
  48.     //һ��bitΪһ������Ϊ4us�ķ���   
  49. }   
  50. static void WriteDAC8532Byte(u8 byteV)   
  51. {   
  52.     int i;   
  53.     for(i=0;i<8;i++)   
  54.     {   
  55.         if((byteV&0x80)==0)   
  56.         {   
  57.             WriteDAC8532Bit0();   
  58.         }   
  59.         else   
  60.         {   
  61.             WriteDAC8532Bit1();   
  62.         }   
  63.         byteV<<=1;   
  64.     }   
  65. }   
  66. void WriteDAC8532(u16 val)   
  67. {   
  68.     u8 byteH=(u8)(val>>8);   
  69.     u8 byteL=(u8)(val);   
  70.     u8 byteCtrl=0x10;   
  71.     //ͬ��λ��Ч   
  72.     delay_us_sys(1);   
  73.     DAC8532_SYNC_1;   
  74.     delay_us_sys(1);   
  75.     DAC8532_SYNC_0;   
  76.     delay_us_sys(1);   
  77.     //д�����ֽ�   
  78.     WriteDAC8532Byte(byteCtrl);   
  79.     //д���ֽ�   
  80.     WriteDAC8532Byte(byteH);   
  81.     //д���ֽ�   
  82.     WriteDAC8532Byte(byteL);   
  83.     //����   
  84.     DAC8532_SYNC_1;   
  85.     delay_us_sys(1);   
  86.     DAC8532_SCL_1;   
  87. }   

猜你喜欢

转载自blog.csdn.net/qq_25814297/article/details/108681399