1、正弦波发生 频率可调正弦波发生 频率可调 /* (C) COPYRIGHT 2019 STMicroelectronics * / /* Includes -*/ #include stm32f10x_lib.h #include math.h #include platform_config.h /* Private typedef -*/ /* Private define -*/ #define DAC_DHR12RD_Address 0x40007420 #define pi 3.*3421170679 /* Init Structure definition */ DAC_InitT
2、ypeDef DAC_InitStructure; DMA_InitTypeDef DMA_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; GPIO_InitTypeDef GPIO_InitStructure; /* Private macro -*/ /* Private variables -*/ ErrorStatus HSEStartUpStatus; /* uc16 Sine12bit32 = 2047, 2447, 2831, 3185, 3498, 3750, 3939, 4056, 4095, 405
3、6, 3939, 3750, 3495, 3185, 2831, 2447, 2047, 1647, 1263, 909, 599, 344, 155, 38, 0, 38, 155, 344, 599, 909, 1263, 1647; */ u32 DualSine12bit32; u32 sina32; u32 sinb32; int fre=19; u8 Idx = 0; u8 i; /* Private function prototypes -*/ void RCC_Configuration(void); void GPIO_Configuration(void); void N
4、VIC_Configuration(void); void Delay(vu32 nCount); /* Private functions -*/ /* * Function Name : main * Description : Main program. * Input : None * Output : None * Return : None */ int main(void) #ifdef DEBUG debug(); #endif /* System Clocks Configuration */ RCC_Configuration(); /* GPIO configuratio
5、n */ GPIO_Configuration(); /* NVIC Configuration */ NVIC_Configuration(); /* TIM8 Configuration */ /data format /* for (Idx= 0; Idx DualSine12bitIdx = (Sine12bitIdx */ /16 while(1) if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)=0) /如果PA0 = 0 /* Time base configuration */ TIM_TimeBaseStructInit(&TIM_Tim
6、eBaseStructure); TIM_TimeBaseStructure.TIM_Period = fre; /数值增大1,频率减小0.1 TIM_TimeBaseStructure.TIM_Prescaler = fre; TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)=0) ; if(GPIO_ReadInputDataBit(G
7、PIOA, GPIO_Pin_8)=0) /如果PA8 = 0 while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8)=0) ; if (fre2) fre=fre-2; for(i=0;i TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure); /* TIM8 TRGO selection */ TIM_SelectOutputTrigger(TIM8, TIM_TRGOSource_Update); /* DAC channel1 Configuration */ DAC_StructInit(&DAC_Init
8、Structure); DAC_InitStructure.DAC_Trigger = DAC_Trigger_T8_TRGO; DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None; DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable; DAC_Init(DAC_Channel_1, &DAC_InitStructure); /* DAC channel2 Configuration */ DAC_Init(DAC_Channel_2, &DAC_I
9、nitStructure); /* Fill Sine32bit table */ /* DMA2 channel4 configuration */ DMA_DeInit(DMA2_Channel4); /DAC 通道2 DMA_InitStructure.DMA_PeripheralBaseAddr = DAC_DHR12RD_Address; DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&sina ; / DualSine12bit DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; DMA_I
10、nitStructure.DMA_BufferSize = 32; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; DMA_InitS
11、tructure.DMA_Mode = DMA_Mode_Circular; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_Init(DMA2_Channel4, &DMA_InitStructure); /* Enable DMA2 Channel4 */ DMA_Cmd(DMA2_Channel4, ENABLE); DMA_Cmd(DMA2_Channel3, ENABLE); /* Enable DAC Channel1 */ DA
12、C_Cmd(DAC_Channel_1, ENABLE); /* Enable DAC Channel2 */ DAC_Cmd(DAC_Channel_2, ENABLE); /* Enable DMA for DAC Channel2 */ DAC_DMACmd(DAC_Channel_2, ENABLE); sina /* TIM8 enable counter */ TIM_Cmd(TIM8, ENABLE); /* * Function Name : RCC_Configuration * Description : Configures the different system cl
13、ocks. * Input : None * Output : None * Return : None */ 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 P
14、refetch 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 =
15、 8MHz * 9 = 72 MHz */ RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); /* Enable PLL */ RCC_PLLCmd(ENABLE); /* Wait till PLL is ready */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOF,
16、 ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_8; /PA0 PA8设置为输入 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET) /* Select PLL as system clock source */ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLC
17、LK); /* Wait till PLL is used as system clock source */ while(RCC_GetSYSCLKSource() != 0x08) RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx, ENABLE); /* Enable peripheral clocks -*/ /* DMA clock enable */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE); /* AFIO and GPIOA Periph clock enable */ RCC_AP
18、B2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA, ENABLE); /* DAC Periph clock enable */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE); /* TIM8 Periph clock enable */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE); /* * Function Name : GPIO_Configuration * Description : Configur
19、es the different GPIO ports. * Input : None * Output : None * Return : None */ void GPIO_Configuration(void) GPIO_InitTypeDef GPIO_InitStructure; /#if defined USE_USART2 & defined USE_STM3210E_EVAL /* Enable AFIO clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); /* Enable the USART2 Pins
20、 Software Remapping */ / GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE); /#endif /* Configure USARTx_Tx as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_TxPin; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOx, &GPI
21、O_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOx, &GPIO_InitStructure); /* Configure USARTx_Rx as input floating */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructu
22、re.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOx, &GPIO_InitStructure); /* GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitSt
23、ructure); */ /* * Function Name : NVIC_Configuration * Description : Configures Vector Table base location. * Input : None * Output : None * Return : None */ void NVIC_Configuration(void) #ifdef VECT_TAB_RAM /* Set the Vector Table base location at 0x20000000 */ NVIC_SetVectorTable(NVIC_VectTab_RAM,
24、 0x0); #else /* VECT_TAB_FLASH */ /* Set the Vector Table base location at 0x08000000 */ NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); #endif /* * Function Name : Delay * Description : Inserts a delay time. * Input : nCount: specifies the delay time length. * Output : None * Return : None */ void De
25、lay(vu32 nCount) for(; nCount != 0; nCount-); #ifdef DEBUG /* * Function Name : assert_failed * Description : Reports the name of the source file and the source line number * where the assert_param error has occurred. * Input : - file: pointer to the source file name * - line: assert_param error lin
26、e source number * Output : None * Return : None */ void assert_failed(u8* file, u32 line) /* User can add his own implementation to report the file name and line number, ex: printf(Wrong parameters value: file %s on line %drn, file, line) */ /* Infinite loop */ while (1) #endif /* (C) COPYRIGHT 2019 STMicroelectronics *END OF FILE*/