新手上路
- 积分
- 39
- 金钱
- 39
- 注册时间
- 2019-9-24
- 在线时间
- 13 小时
|
10金钱
想通过764的SPI接口控制一个外部的DAC芯片,按照芯片的F103例子进行了移植,可是实验中芯片没有反映。不知道哪里出了问题。DAC板子是TLV65610.- <div>/////TLV56.C</div><div>#include "TLV56xx.H"
- </div>#include "delay.h"
- void DAC_Tlv56xx_Init(void)
- {
- int i;
- GPIO_InitTypeDef GPIO_InitStructure;
- __HAL_RCC_GPIOB_CLK_ENABLE(); //ʹÄÜPC¶Ë¿ÚʱÖÓ
- __HAL_RCC_GPIOC_CLK_ENABLE();
- __HAL_RCC_GPIOD_CLK_ENABLE();
- GPIO_InitStructure.Pin = GPIO_PIN_9|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
- GPIO_InitStructure.Mode = GPIO_MODE_AF_PP; //ÍÆÍìÊä³ö
- GPIO_InitStructure.Speed = GPIO_SPEED_FAST; //IO¿ÚËÙ¶ÈΪ50MHz
- HAL_GPIO_Init(GPIOB, &GPIO_InitStructure); //¸ù¾ÝÉ趨²ÎÊý³õʼ»¯GPIOE
- HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15,GPIO_PIN_RESET); //PBA Êä³ö¸ß
-
- GPIO_InitStructure.Pin = GPIO_PIN_7;
- GPIO_InitStructure.Mode = GPIO_MODE_AF_PP; //ÍÆÍìÊä³ö
- GPIO_InitStructure.Speed = GPIO_SPEED_FAST; //IO¿ÚËÙ¶ÈΪ50MHz
- HAL_GPIO_Init(GPIOD, &GPIO_InitStructure); //¸ù¾ÝÉ趨²ÎÊý³õʼ»¯GPIOD
- HAL_GPIO_WritePin(GPIOD,GPIO_PIN_7,GPIO_PIN_RESET);
-
- GPIO_InitStructure.Mode = GPIO_MODE_INPUT;
- GPIO_InitStructure.Pin =GPIO_PIN_9;
- GPIO_InitStructure.Speed = GPIO_SPEED_LOW;
- HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);
-
- LDAC_HIGH;
- FRE_HIGH;
- delay_ms(100);
- for(i = 0; i < 8; i++)
- TLV56XX_WriteChannelValue(i, 0);
- delay_ms(50);
- }
- volatile uint16_t Cmd;
- void WriteChannelValue(uint8_t channel, uint16_t value)
- {
-
- int i;
- uint16_t bit_state;
- //TLV5610 12BIT
- Cmd = (channel<<12)|((value)&0X0FFF);
-
- // LDAC_HIGH;
- FS_HIGH;
- FS_LOW;
- for(i = 0; i < 16; i++)
- {
- SCLK_HIGH;
- bit_state = Cmd&0X8000;
- if(bit_state)
- DATA_HIGH;
- else
- DATA_LOW;
- SCLK_LOW;
- Cmd <<= 1;
- }
- FS_HIGH;
- LDAC_LOW;
- // LDAC_LOW;
-
- LDAC_HIGH;
- }
- void TLV56XX_WriteChannelValue(uint8_t channel, uint16_t value)
- {
- WriteChannelValue(channel, value);
- <div>}</div><div>
- </div><div>
- </div><div>///////<font style="background-color: rgb(255, 255, 255);">TLV56XX.H</font></div><div>#ifndef _TLV56XX_H_
- #define _TLV56XX_H_</div><div>#include <stdint.h>
- #include "sys.h"
- </div><div>#define SCLK_HIGH HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,GPIO_PIN_SET)// TLV_SCK = 1 SCK--PB13
- #define DATA_HIGH HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15,GPIO_PIN_SET) // TLV_DATA = 1 do--PB15
- #define FS_HIGH HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET)//TLV_FS = 1 PB9
- #define LDAC_HIGH HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,GPIO_PIN_SET) //TLV_LDAC = 1 PB14
- #define FRE_HIGH HAL_GPIO_WritePin(GPIOD,GPIO_PIN_7,GPIO_PIN_SET) // TLV_FRE = 1 PD7</div><div>#define SCLK_LOW HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,GPIO_PIN_RESET) //TLV_SCK = 0
- #define DATA_LOW HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15,GPIO_PIN_RESET) // TLV_DATA = 0
- #define FS_LOW HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET) //TLV_FS = 0
- #define LDAC_LOW HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,GPIO_PIN_RESET) // TLV_LDAC = 0
- #define FRE_LOW HAL_GPIO_WritePin(GPIOD,GPIO_PIN_7,GPIO_PIN_RESET) //TLV_FRE = 0</div><div>void DAC_Tlv56xx_Init(void);
- void WriteChannelValue(uint8_t channel, uint16_t value);
- void TLV56XX_WriteChannelValue(uint8_t channel, uint16_t value);</div><div>#endif</div><div>
- </div><div>
- ////main.c</div><div>#include "sys.h"
- #include "delay.h"
- #include "usart.h"
- #include "led.h"
- #include "key.h"
- #include "lcd.h"
- #include "sdram.h"
- #include "adc.h"
- #include "TLV56xx.H"
- </div><div>int main(void)
- {
- // MY_NVIC_PriorityGroup_Config(NVIC_PriorityGroup_2);
- u16 adcx;
- float temp;
- Cache_Enable();
- HAL_Init();
- Stm32_Clock_Init(432,25,2,9);
- delay_init(216);
- uart_init(115200);
- LED_Init();
- KEY_Init();
- SDRAM_Init();
- LCD_Init();
- DAC_Tlv56xx_Init();
- MY_ADC_Init();
- POINT_COLOR=RED;
- LCD_ShowString(30,50,200,16,16,"Apollo STM32F4/F7");
- LCD_ShowString(30,70,200,16,16,"ADC TEST");
- LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
- LCD_ShowString(30,110,200,16,16,"2016/7/12");
- POINT_COLOR=BLUE;
- LCD_ShowString(30,130,200,16,16,"ADC1_CH5_VAL:");
- LCD_ShowString(30,150,200,16,16,"ADC1_CH5_VOL:0.000V");
- TLV56XX_WriteChannelValue(0, 4095/8*1);
- TLV56XX_WriteChannelValue(1, 4095/8*2);
- TLV56XX_WriteChannelValue(2, 4095/8*3);
- TLV56XX_WriteChannelValue(3, 4095/8*4);
- TLV56XX_WriteChannelValue(4, 4095/8*5);
- TLV56XX_WriteChannelValue(5, 4095/8*6);
- TLV56XX_WriteChannelValue(6, 4095/8*7);
- TLV56XX_WriteChannelValue(7, 4095/8*8);
- while(1)
- {
- // DAC5618_translate_a(4095);
- adcx=Get_Adc_Average(ADC_CHANNEL_5,20);
- LCD_ShowxNum(134,130,adcx,4,16,0);
- temp=(float)adcx*(3.3/4096);
- adcx=temp;
- LCD_ShowxNum(134,150,adcx,1,16,0);
- temp-=adcx;
- temp*=1000;
- LCD_ShowxNum(150,150,temp,3,16,0X80);
- LED0_Toggle;
- delay_ms(250);
- }
- }
- </div>
复制代码 |
|