新手上路
- 积分
- 27
- 金钱
- 27
- 注册时间
- 2019-8-7
- 在线时间
- 8 小时
|

楼主 |
发表于 2019-8-9 08:59:57
|
显示全部楼层
*DAC配置部分*
DAC_HandleTypeDef DAC1_Handler;//DAC¾ä±ú
void DAC1_Init(void)
{
DAC_ChannelConfTypeDef DACCH1_Config;
DAC1_Handler.Instance=DAC;
HAL_DAC_Init(&DAC1_Handler);
DACCH1_Config.DAC_Trigger=DAC_TRIGGER_T2_TRGO;
DACCH1_Config.DAC_OutputBuffer=DAC_OUTPUTBUFFER_DISABLE;
HAL_DAC_ConfigChannel(&DAC1_Handler,&DACCH1_Config,DAC_CHANNEL_1);
HAL_DAC_Start(&DAC1_Handler,DAC_CHANNEL_1); //¿aÆôDACí¨μà1
}
void HAL_DAC_MspInit(DAC_HandleTypeDef* hdac)
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_DAC_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_Initure.Pin=GPIO_PIN_4;
GPIO_Initure.Mode=GPIO_MODE_ANALOG;
GPIO_Initure.Pull=GPIO_NOPULL;
HAL_GPIO_Init(GPIOA,&GPIO_Initure);
}
//éèÖÃí¨μà1êä3öμçÑ1
//vol:0~3300,′ú±í0~3.3V
void DAC1_Set_Vol(u16 vol)
{
double temp=vol;
temp/=1000;
temp=temp*4096/3.3;
HAL_DAC_SetValue(&DAC1_Handler,DAC_CHANNEL_1,DAC_ALIGN_12B_R,temp);
}
*定时器部分*
TIM_HandleTypeDef TIM2_Handler; //¶¨ê±Æ÷¾ä±ú
//¶¨ê±Æ÷òç3öê±¼ä¼ÆËã·½·¨:Tout=((arr+1)*(psc+1))/Ft us. 10*108/108M=0.00001 0.001 1/0.001=1000
void TIM2_Init(u16 arr,u16 psc)
{
TIM2_Handler.Instance=TIM2;
TIM2_Handler.Init.Prescaler=psc;
TIM2_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;
TIM2_Handler.Init.Period=arr;
TIM2_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;
HAL_TIM_Base_Init(&TIM2_Handler);
HAL_TIM_Base_Start_IT(&TIM2_Handler);
__HAL_TIM_URS_ENABLE(&TIM2_Handler);
}
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
{
if(htim->Instance==TIM2)
{
__HAL_RCC_TIM2_CLK_ENABLE();
HAL_NVIC_SetPriority(TIM2_IRQn,1,3);
HAL_NVIC_EnableIRQ(TIM2_IRQn);
}
}
void TIM2_IRQHandler(void)
{
HAL_TIM_IRQHandler(&TIM2_Handler);
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim==(&TIM2_Handler))
{
LED1_Toggle; //LED0·′×a
}
}
*DMA配置部分*
DMA_HandleTypeDef DAC1TxDMA_Handler;
extern DAC_HandleTypeDef DAC1_Handler;
void MYDMA_Config(DMA_Stream_TypeDef *DMA_Streamx,u32 chx)
{
if((u32)DMA_Streamx>(u32)DMA2)
{
__HAL_RCC_DMA2_CLK_ENABLE();
}else
{
__HAL_RCC_DMA1_CLK_ENABLE();
}
__HAL_LINKDMA(&DAC1_Handler,DMA_Handle1,DAC1TxDMA_Handler);
//Tx DMAÅäÖÃ
DAC1TxDMA_Handler.Instance=DMA_Streamx;
DAC1TxDMA_Handler.Init.Channel=chx;
DAC1TxDMA_Handler.Init.Direction=DMA_MEMORY_TO_PERIPH;
DAC1TxDMA_Handler.Init.PeriphInc=DMA_PINC_DISABLE;
DAC1TxDMA_Handler.Init.MemInc=DMA_MINC_ENABLE;
DAC1TxDMA_Handler.Init.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD;
DAC1TxDMA_Handler.Init.MemDataAlignment=DMA_MDATAALIGN_HALFWORD;
DAC1TxDMA_Handler.Init.Mode=DMA_CIRCULAR;
DAC1TxDMA_Handler.Init.Priority=DMA_PRIORITY_MEDIUM;
DAC1TxDMA_Handler.Init.FIFOMode=DMA_FIFOMODE_DISABLE;
DAC1TxDMA_Handler.Init.FIFOThreshold=DMA_FIFO_THRESHOLD_FULL;
DAC1TxDMA_Handler.Init.MemBurst=DMA_MBURST_SINGLE;
DAC1TxDMA_Handler.Init.PeriphBurst=DMA_PBURST_SINGLE;
HAL_DMA_DeInit(&DAC1TxDMA_Handler);
HAL_DMA_Init(&DAC1TxDMA_Handler);
}
*main部分*
#define DAC_SIN_SIZE 100 //·¢Ëíêy¾Y3¤¶è,×îoÃμèóúsizeof(TEXT_TO_SEND)+2μÄÕûêy±¶.
u32 DAC_SIN_BUF[DAC_SIN_SIZE]; //·¢Ëíêy¾Y»o3åÇø
#define PI 3.1415962
extern DAC_HandleTypeDef DAC1_Handler; //DAC??
extern DMA_HandleTypeDef DAC1TxDMA_Handler; //DMA??
extern TIM_HandleTypeDef TIM2_Handler; //?????
//2úéúÕyÏò2¨oˉDòáD£¬¸ù¾YDAC_SIN_SIZEéú3é¡£
void dac_creat_sin_buf(void)
{
u8 i;
float inc=2*PI/DAC_SIN_SIZE; //¼ÆËãÔöá¿£¨ò»¸öÖüÆúDAC_SIN_BUF¸öμ㣩
float outdata=0;
for(i=0;i<DAC_SIN_SIZE;i++)
{
outdata=2047*(1+sin(inc*i)); //¼ÆËãòÔdots¸öμãÎaÖüÆúμÄÿ¸öμãμÄÖ죬·Å′ó2048±¶£¬2¢Æ«òÆμ½ÕyêyÇøóò¡£
printf("%f\r\n",outdata);
DAC_SIN_BUF=outdata;
}
}
int main(void)
{
u16 i=0;
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();
TIM2_Init(9,108-1); // òç3öê±¼ä*êy¾Y¸öêy=ÕyÏò2¨ÆμÂê¡£ òç3öê±¼ä=(arr+1)*(psc+1)/¶¨ê±Æ÷ê±Öó
dac_creat_sin_buf();
DAC1_Init();
MYDMA_Config(DMA1_Stream5,DMA_CHANNEL_7);
POINT_COLOR=RED;
LCD_ShowString(30,50,200,16,16,"Apollo STM32F4/F7");
LCD_ShowString(30,70,200,16,16,"DMA TEST");
LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(30,110,200,16,16,"2016/1/24");
LCD_ShowString(30,130,200,16,16,"KEY0:Start");
POINT_COLOR=BLUE;
HAL_DAC_Start_DMA(&DAC1_Handler,DAC_CHANNEL_1, DAC_SIN_BUF, DAC_SIN_SIZE, DAC_ALIGN_12B_R);
while(1)
{
i++;
delay_ms(10);
if(i==20)
{
LED0_Toggle;//ìáê¾Ïμí3ÕyÔúÔËDD
i=0;
}
}
}
|
|