金牌会员
 
- 积分
- 2357
- 金钱
- 2357
- 注册时间
- 2019-10-29
- 在线时间
- 380 小时
|

楼主 |
发表于 2021-1-27 20:01:45
|
显示全部楼层
我目前的做法
主要是等待到他电平为低,在让他保持当前值
方法一:由于我在写flash的时候,将中断关闭了,而修改定时器比较值又是在定时器中断执行的,所以我关闭中断前,要将PWM输出低电平
主要修改了两个地方
1.定时器中断中,当我按键产生的标志,那么会执行下面这些,当高电平进入中断,则保持他之前输出的高电平时间,低电平的话,就让他保持当前状态
- if(HAL_GPIO_ReadPin(timch->GPIOx, timch->GPIO_Pin) == GPIO_PIN_SET)//读取该定时器对应引脚电平 高电平
- {
- timch->count =__HAL_TIM_GET_COMPARE(&timch->htim, timch->channel) + (4864+Buf[rps[timch->rpspin].mode]-2048);
- timch->count = (timch->count>TIM_PERIOD) ? (timch->count-TIM_PERIOD) : (timch->count);//比较值大于重装载值 减去重装载值
- __HAL_TIM_SET_COMPARE(&timch->htim, timch->channel, timch->count); //设置比较值
- }
- else //低电平
- {
- __HAL_TIM_SET_COMPARE(&timch->htim, timch->channel,64000); //保持当前电平
- }
复制代码 2.在写flash前,等待电平为低,再输出64000(100%)保持当前电平
- while(HAL_GPIO_ReadPin(TIMCH_Buff[i].GPIOx, TIMCH_Buff[i].GPIO_Pin) != GPIO_PIN_RESET){}
- __HAL_TIM_SET_COMPARE(&TIMCH_Buff[i].htim, TIMCH_Buff[i].channel, 64000);
复制代码
方法二:当写flash前后没有对中断进行开关
那么可以直接在写flash前等待他为低电平,然后对定时器输出进行关闭,写完之后再开启
- while(HAL_GPIO_ReadPin(TIMCH_Buff[i].GPIOx, TIMCH_Buff[i].GPIO_Pin) != GPIO_PIN_RESET){}
- HAL_TIM_OC_Stop_IT(&TIMCH_Buff[i].htim, TIMCH_Buff[i].channel);
- Write_Flash_Buf(FLASH_RF_PIN_MODE_ADR,(uint8_t *) modebuff, sizeof(modebuff));
- Write_Flash_Buf(FLASH_RF_PIN_DATA_ADR, Slave_re_Pindata_temp, sizeof(Slave_re_Pindata_temp));
- HAL_TIM_OC_Start_IT(&TIMCH_Buff[i].htim, TIMCH_Buff[i].channel);
复制代码
|
|