Difference between revisions of "CH32 Oscillator"

From Stm32World Wiki
Jump to navigation Jump to search
Line 23: Line 23:
 
</pre>
 
</pre>
  
== DMA ==  
+
== DMA ==
 +
 
 +
<pre>
 +
void Dac_Dma_Init (void) {
 +
    DMA_InitTypeDef DMA_InitStructure = { 0 };
 +
    RCC_AHBPeriphClockCmd (RCC_AHBPeriph_DMA2, ENABLE);
 +
 
 +
    DMA_StructInit (&DMA_InitStructure);
 +
    DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t) &(DAC->RD12BDHR);
 +
    DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t) &dac_buffer[0];
 +
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
 +
    DMA_InitStructure.DMA_BufferSize = 2 * BUFFER_SIZE;
 +
    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_VeryHigh;
 +
    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
 +
 
 +
    DMA_Init (DMA2_Channel3, &DMA_InitStructure);
 +
 
 +
    DMA_ITConfig (DMA2_Channel3, DMA_IT_TC, ENABLE);
 +
    DMA_ITConfig (DMA2_Channel3, DMA_IT_HT, ENABLE);
 +
 
 +
    DMA_Cmd (DMA2_Channel3, ENABLE);
 +
 
 +
}
 +
</pre>
  
 
== DAC ==
 
== DAC ==

Revision as of 03:05, 5 July 2022

In order to get to know the CH32V307 MCU better I decided to create a dual oscillator using the DACs.

Timer

void Timer4_Init (void) {
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure = { 0 };
    RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM4, ENABLE);

    TIM_TimeBaseStructInit (&TIM_TimeBaseStructure);
    TIM_TimeBaseStructure.TIM_Period = 3000 - 1;
    TIM_TimeBaseStructure.TIM_Prescaler = 0;
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit (TIM4, &TIM_TimeBaseStructure);

    TIM_SelectOutputTrigger (TIM4, TIM_TRGOSource_Update);
    TIM_Cmd (TIM4, ENABLE);
}

DMA

void Dac_Dma_Init (void) {
    DMA_InitTypeDef DMA_InitStructure = { 0 };
    RCC_AHBPeriphClockCmd (RCC_AHBPeriph_DMA2, ENABLE);

    DMA_StructInit (&DMA_InitStructure);
    DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t) &(DAC->RD12BDHR);
    DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t) &dac_buffer[0];
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
    DMA_InitStructure.DMA_BufferSize = 2 * BUFFER_SIZE;
    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_VeryHigh;
    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;

    DMA_Init (DMA2_Channel3, &DMA_InitStructure);

    DMA_ITConfig (DMA2_Channel3, DMA_IT_TC, ENABLE);
    DMA_ITConfig (DMA2_Channel3, DMA_IT_HT, ENABLE);

    DMA_Cmd (DMA2_Channel3, ENABLE);

}

DAC

DMA Interrupt

Oscillator Calculation

Miscellaneous Links