Difference between revisions of "CH32 Oscillator"
Jump to navigation
Jump to search
(→Timer) |
(→DMA) |
||
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 02: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); }