关键代码:
定时器配置:
- void TIM3_Configuration(void)
- {
- // TMR3 Channel1 = PA6
- // TMR3 Channel2 = PA7
- // TMR3 Channel3 = PB0
- // TMR3 Channel4 = PB1
-
- TMR_TimerBaseInitType TMR_TMReBaseStructure;
- TMR_OCInitType TMR_OCInitStructure;
-
- /* Compute the prescaler value */
- /* TMRe base configuration */
-
- TMR_TimeBaseStructInit(&TMR_TMReBaseStructure);
- TMR_TMReBaseStructure.TMR_Period = 1056 - 1; //1056 / 40 = 26.4us //800*600@60Hz, 26.4us
- TMR_TMReBaseStructure.TMR_DIV = (uint16_t) (SystemCoreClock / 40000000) - 1;
- TMR_TMReBaseStructure.TMR_ClockDivision = 0;
- TMR_TMReBaseStructure.TMR_CounterMode = TMR_CounterDIR_Up;
- TMR_TimeBaseInit(TMR3, &TMR_TMReBaseStructure);
- /* PWM1 Mode configuration: Channel1 */
- TMR_OCStructInit(&TMR_OCInitStructure);
- TMR_OCInitStructure.TMR_OCMode = TMR_OCMode_PWM1;
- TMR_OCInitStructure.TMR_OutputState = TMR_OutputState_Enable;
- TMR_OCInitStructure.TMR_Pulse = 128 - 1;
- TMR_OCInitStructure.TMR_OCPolarity = TMR_OCPolarity_Low;
- TMR_OC1Init(TMR3, &TMR_OCInitStructure);
- TMR_OC1PreloadConfig(TMR3, TMR_OCPreload_Enable);
- /* PWM1 Mode configuration: Channel2 */
- TMR_OCInitStructure.TMR_OutputState = TMR_OutputState_Enable;
- TMR_OCInitStructure.TMR_Pulse = 128 - 1 + 88 - 12; //12是修正值
- TMR_OCInitStructure.TMR_OCPolarity = TMR_OCPolarity_High;
- TMR_OC2Init(TMR3, &TMR_OCInitStructure);
- TMR_OC2PreloadConfig(TMR3, TMR_OCPreload_Enable);
- // /* PWM1 Mode configuration: Channel3 */
- // TMR_OCInitStructure.TMR_OutputState = TMR_OutputState_Enable;
- // TMR_OCInitStructure.TMR_Pulse = 128 - 1 + 88 + 800;
- // TMR_OCInitStructure.TMR_OCPolarity = TMR_OCPolarity_High;
- // TMR_OC3Init(TMR3, &TMR_OCInitStructure);
- // TMR_OC3PreloadConfig(TMR3, TMR_OCPreload_Enable);
- TMR_ARPreloadConfig(TMR3, ENABLE);
- //interrupts
- TMR_INTConfig(TMR3, TMR_INT_Overflow, ENABLE);
- TMR_INTConfig(TMR3, TMR_INT_CC2, ENABLE);
-
- /* TMR3 enable counter */
- TMR_Cmd(TMR3, ENABLE);
- }
DMA配置:
- void DMA_Configuration(void)
- {
- DMA_InitType DMA_InitStructure;
- /* DMA1 Channel5 Config */
- DMA_Reset(DMA1_Channel5);
- DMA_DefaultInitParaConfig(&DMA_InitStructure);
- DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)0x4000380C;
- DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)vgaBuf;
- DMA_InitStructure.DMA_Direction = DMA_DIR_PERIPHERALDST;
- DMA_InitStructure.DMA_BufferSize = 50;
- DMA_InitStructure.DMA_PeripheralInc = DMA_PERIPHERALINC_DISABLE;
- DMA_InitStructure.DMA_MemoryInc = DMA_MEMORYINC_ENABLE;
- DMA_InitStructure.DMA_PeripheralDataWidth = DMA_PERIPHERALDATAWIDTH_BYTE;
- DMA_InitStructure.DMA_MemoryDataWidth = DMA_MEMORYDATAWIDTH_BYTE;
- //DMA_InitStructure.DMA_Mode = DMA_MODE_CIRCULAR;
- DMA_InitStructure.DMA_Mode = DMA_MODE_NORMAL;
- DMA_InitStructure.DMA_Priority = DMA_PRIORITY_VERYHIGH;
- DMA_InitStructure.DMA_MTOM = DMA_MEMTOMEM_DISABLE;
- DMA_Init(DMA1_Channel5, &DMA_InitStructure);
-
- //interrupts
- DMA_INTConfig(DMA1_Channel5, DMA_INT_TC, ENABLE);
- /* DMA1 Channel5 enable */
- DMA_ChannelEnable(DMA1_Channel5, ENABLE);
- }
SPI配置:
|