STM32的DAC+DMA双通道输出汉字,在示波器中显示汉字

来源:互联网 发布:萌币捏脸数据 编辑:程序博客网 时间:2024/05/22 17:00
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.汉字的点阵数据取




5汉字的的点阵数据的处理
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显示结果



原创粉丝点击