金牌会员
 
- 积分
- 1327
- 金钱
- 1327
- 注册时间
- 2019-7-11
- 在线时间
- 165 小时
|

楼主 |
发表于 2019-9-21 10:58:31
|
显示全部楼层
- DMA_Init(DMA1_Channel3, &DMA_InitStructure); //根据DMA_InitStruct中指定的参数初始化DMA的通道USART1_Tx_DMA_Channel所标识的寄存器
-
- DMA_Cmd(DMA1_Channel3, ENABLE); //DMA1_3使能
- TIM_DMACmd(TIM3, TIM_DMA_Update, ENABLE); //定时器3TIM_DMA_Update使能
-
- NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel3_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 优先级设置
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- DMA_ClearFlag(DMA1_Channel3_IRQn); //清除DMA所有标志
- DMA_ITConfig(DMA1_Channel3,DMA_IT_TC,ENABLE); //开传输完成中断
-
- TIM_SetCounter(TIM3, 0);
- TIM_SetCompare1(TIM3,0); //默认情况下占空比为0,配合比较输出极性设为high,也就是低电平输出
- TIM_Cmd(TIM3, ENABLE); //使能TIM3
- }
- void TIM3_Dma_Pwm_Pulse_Output(u16 arr,u16 psc,u8 zhankongbi_temp,u16 geshu)
- {
- TIM3_Dma_Pwm_Pulse_Output_Set(arr,psc,zhankongbi_temp,geshu);
- }
- void TIM3_Dma_Pwm_Pulse_Output_Set(u16 arr,u16 psc,u8 zhankongbi_temp,u16 geshu)
- {
- TIM_SetAutoreload(TIM3,arr); //设置重装载寄存器
- TIM_PrescalerConfig(TIM3,psc,TIM_PSCReloadMode_Immediate); //设置定时器时钟分频,立即生效
-
- ZhanKongBi=(arr+1) * zhankongbi_temp / 100; //计算占空比
- TIM_SetCompare1(TIM3,ZhanKongBi); //占空比填入比较寄存器
-
- DMA_Cmd(DMA1_Channel3, DISABLE); //DMA失能才能设置
- DMA_SetCurrDataCounter(DMA1_Channel3,geshu); //设置DMA长度,即脉冲数量
- DMA_Cmd(DMA1_Channel3, ENABLE); //开启
-
- TIM_SetCounter(TIM3, 0); //确保定时器计数归零
- TIM_Cmd(TIM3, ENABLE); //开启
- }
- void TIM3_ReInit(void){
- TIM_SetCounter(TIM3, 0);
- TIM_SetCompare1(TIM3, 0);
- }
- void DMA1_Channel3_IRQHandler(void)//脉冲输出完毕,不关闭定时器,而是继续输出低电平
- {
- if(DMA_GetITStatus(DMA1_FLAG_TC3))
- {
- TIM3_ReInit();
复制代码
|
|