1,参照野火的输出正弦波的案例,把DAC进行配置,
static void DAC_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
DAC_InitTypeDef DAC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
DAC_InitStructure.DAC_Trigger = DAC_Trigger_T2_TRGO;
DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;
DAC_Init(DAC_Channel_1, &DAC_InitStructure);
DAC_Init(DAC_Channel_2, &DAC_InitStructure);
DAC_Cmd(DAC_Channel_1, ENABLE);
DAC_Cmd(DAC_Channel_2, ENABLE);
DAC_DMACmd(DAC_Channel_2, ENABLE);
}
2.对其 触发时钟进行配置
static void DAC_TIM_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
/* ʹÄÜTIM2ʱÖÓ£¬TIM2CLK Ϊ72M */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
/* TIM2»ù±¾¶¨Ê±Æ÷ÅäÖà */
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.TIM_Period = 250; //¶¨Ê±ÖÜÆÚ 20
TIM_TimeBaseStructure.TIM_Prescaler = 64; //Ô¤·ÖƵ£¬²»·ÖƵ 72M / (0+1) = 72M
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //ʱÖÓ·ÖƵϵÊý
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //ÏòÉϼÆÊýģʽ
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
/* ÅäÖÃTIM2´¥·¢Ô´ */
TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update);
/* ʹÄÜTIM2 */
TIM_Cmd(TIM2, ENABLE);
}
3对DMA进行配置
static void DAC_DMA_Config(void)
{
DMA_InitTypeDef DMA_InitStructure;
/* ʹÄÜDMA2ʱÖÓ */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);
/* ÅäÖÃDMA2 */
DMA_InitStructure.DMA_PeripheralBaseAddr = DAC_DHR12RD_Address; //ÍâÉèÊý¾ÝµØÖ·
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&DualSine12bit ; //ÄÚ´æÊý¾ÝµØÖ· DualSine12bit
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; //Êý¾Ý´«Êä·½ÏòÄÚ´æÖÁÍâÉè
DMA_InitStructure.DMA_BufferSize = 290; //»º´æ´óСΪ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_InitStructure.DMA_Mode = DMA_Mode_Circular; //Ñ»·Ä£Ê½
DMA_InitStructure.DMA_Priority = DMA_Priority_High; //¸ßDMAͨµÀÓÅÏȼ¶
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //·ÇÄÚ´æÖÁÄÚ´æģʽ
DMA_Init(DMA2_Channel4, &DMA_InitStructure);
/* ʹÄÜDMA2-14ͨµÀ */
DMA_Cmd(DMA2_Channel4, ENABLE);
}
4.汉字的点阵数据取
void DAC_Mode_Init(void)
{
uint16_t xbit[32];//xÖá32λ
uint16_t ybit[32];//yÖá32λ
uint8_t temp;
uint16_t i=0,j=0,k=0,w=0;
DAC_Config();
DAC_TIM_Config();
DAC_DMA_Config();
/*while(1)
{
for(i=0;i<48;i++)
{
for(j=0;j<6;j++)
{
temp=0x80;
for(k=0;k<8;k++)
{
if(Sine12bit[6*i+j] & temp)
{
xbit[i]=i*85;
//ybit[j*8+k]=(32-(j*8+k))*128;
ybit[j*8+k]=(5-j)*680+(8-k)*85;
DualSine12bit[w]=(((ybit[j*8+k]))+(xbit[i]<<15));
w++;
}
temp=temp>>1;
}
}
}
6显示结果