#include "stm32f10x_lib.h"#include "math.h"
ErrorStatus HSEStartUpStatus;GPIO_InitTypeDef GPIO_DA;GPIO_InitTypeDef GPIO_InitStructure;
#define DA_CS GPIO_Pin_14#define DA_SCLK GPIO_Pin_15#define DA_SDI GPIO_Pin_13#define DA_LDAC GPIO_Pin_12 #define Key_up GPIO_Pin_0#define Key_down GPIO_Pin_8
void RCC_Configuration(void);void NVIC_Configuration(void);void Delay(vu32 nCount);void da_cnverter(vu16 data);
int main(){ vu16 da_value = 0; vu16 i; vu16 Sine16bit[32] = { 0x7FFF,0x98F8,0xB0FB,0xC71C, 0xDA81,0xEA6C,0xF640,0xFD89, 0xFFFE,0xFD89,0xF640,0xEA6C, 0xDA81,0xC71C,0xB0FB,0x98F8, 0x7FFF,0x6706,0x4F03,0x38E2, 0x257D,0x1592,0x09BE,0x0275, 0x0000,0x0275,0x09BE,0x1592, 0x257D,0x38E2,0x4F03,0x6706};
RCC_Configuration(); NVIC_Configuration(); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOF, ENABLE); // CS GPIO_DA.GPIO_Pin = DA_CS; GPIO_DA.GPIO_Speed = GPIO_Speed_50MHz; GPIO_DA.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB,&GPIO_DA); // SCLK GPIO_DA.GPIO_Pin = DA_SCLK; GPIO_DA.GPIO_Speed = GPIO_Speed_50MHz; GPIO_DA.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB,&GPIO_DA); // SDI GPIO_DA.GPIO_Pin = DA_SDI; GPIO_DA.GPIO_Speed = GPIO_Speed_50MHz; GPIO_DA.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB,&GPIO_DA); // LDAC GPIO_DA.GPIO_Pin = DA_LDAC; GPIO_DA.GPIO_Speed = GPIO_Speed_50MHz; GPIO_DA.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB,&GPIO_DA); // Key_up GPIO_DA.GPIO_Pin = Key_up; GPIO_DA.GPIO_Speed = GPIO_Speed_50MHz; GPIO_DA.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA,&GPIO_DA); // Key_down GPIO_DA.GPIO_Pin = Key_down; GPIO_DA.GPIO_Speed = GPIO_Speed_50MHz; GPIO_DA.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA,&GPIO_DA); // led GPIO_DA.GPIO_Pin = GPIO_Pin_6; GPIO_DA.GPIO_Speed = GPIO_Speed_50MHz; GPIO_DA.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOF,&GPIO_DA); // led GPIO_DA.GPIO_Pin = GPIO_Pin_7; GPIO_DA.GPIO_Speed = GPIO_Speed_50MHz; GPIO_DA.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOF,&GPIO_DA); //GPIO_ResetBits(GPIOF, GPIO_Pin_6); // 输出0 亮 //GPIO_SetBits(GPIOF, GPIO_Pin_6); // 输出1 灭 //GPIO_WriteBit(GPIOF,GPIO_Pin_6,RESET); while(1) { GPIO_SetBits(GPIOF, GPIO_Pin_6); // 输出1 灭 GPIO_SetBits(GPIOF, GPIO_Pin_7); // 输出1 灭 /* if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)==0) { da_value = da_value + 1; GPIO_ResetBits(GPIOF, GPIO_Pin_6); // 输出0 亮 } if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8)==0) { da_value = da_value - 1; GPIO_ResetBits(GPIOF, GPIO_Pin_7); // 输出0 亮 } */ for(i=0;i<32;i++) da_cnverter((Sine16bit)/10); }// return 0;}void RCC_Configuration(void){ /* RCC system reset(for debug purpose) */ RCC_DeInit();
/* Enable HSE */ RCC_HSEConfig(RCC_HSE_ON);
/* Wait till HSE is ready */ HSEStartUpStatus = RCC_WaitForHSEStartUp();
if(HSEStartUpStatus == SUCCESS) { /* Enable Prefetch Buffer */ FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
/* Flash 2 wait state */ FLASH_SetLatency(FLASH_Latency_2); /* HCLK = SYSCLK */ RCC_HCLKConfig(RCC_SYSCLK_Div1); /* PCLK2 = HCLK */ RCC_PCLK2Config(RCC_HCLK_Div1);
/* PCLK1 = HCLK/2 */ RCC_PCLK1Config(RCC_HCLK_Div2);
/* PLLCLK = 8MHz * 9 = 72 MHz */ RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
/* Enable PLL */ RCC_PLLCmd(ENABLE);
/* Wait till PLL is ready */ while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {
}
/* Select PLL as system clock source */ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
/* Wait till PLL is used as system clock source */ while(RCC_GetSYSCLKSource() != 0x08) { } }}void NVIC_Configuration(void){#ifdef VECT_TAB_RAM /* Set the Vector Table base location at 0x20000000 */ NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); #else /* VECT_TAB_FLASH */ /* Set the Vector Table base location at 0x08000000 */ NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); #endif}void Delay(vu32 nCount){ for(; nCount != 0; nCount--);}void da_cnverter(vu16 data){ vu16 i; GPIO_ResetBits(GPIOB, DA_CS); // CS置0 GPIO_ResetBits(GPIOB, DA_LDAC); // LDAC一直为0 GPIO_SetBits(GPIOB, DA_SCLK); // clk置1
for(i = 0;i < 16;i ++) { if(data & 0x8000) GPIO_SetBits(GPIOB, DA_SDI); else GPIO_ResetBits(GPIOB, DA_SDI); Delay(10); GPIO_ResetBits(GPIOB, DA_SCLK); // 时钟线置0 data = data << 1; GPIO_SetBits(GPIOB, DA_SCLK); // 时钟线置1 } GPIO_SetBits(GPIOB, DA_CS); // CS置1}
这是我现在代码。