STM32 IAP正常,LCD界面 按键 AD都正常,就只有蜂鸣器不发生

2019-12-21 12:17发布

<p> bootloader: 0x8000000~0x8003000</p><br> <strong>bootloader主程序</strong><br><p><br></p><pre style="max-width: 100%;"><code class="cpp hljs" codemark="1"><span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">(<span class="hljs-keyword">void</span>)</span> </span>{ Uart1Init(); Timer4Init(); NVICConfigure(); FLASH_Unlock(); Delayms(<span class="hljs-number">50</span>); <span class="hljs-keyword">while</span>(<span class="hljs-number">1</span>) { <span class="hljs-keyword">if</span>(timer4_over_flag==<span class="hljs-number">1</span>) <span class="hljs-comment">//jump to app</span> { <span class="hljs-keyword">if</span> (((*(__IO <span class="hljs-keyword">uint32_t</span>*)ApplicationAddress) &amp; <span class="hljs-number">0x2FFE0000</span> ) == <span class="hljs-number">0x20000000</span>) { DisableAllNVIC(); JumpAddress = *(__IO <span class="hljs-keyword">uint32_t</span>*) (ApplicationAddress + <span class="hljs-number">4</span>); Jump_To_Application = (pFunction) JumpAddress; <span class="hljs-comment">// __set_PSP(*(volatile unsigned int*) ApplicationAddress);</span> <span class="hljs-comment">// __set_CONTROL(0);</span> __set_MSP(*(__IO <span class="hljs-keyword">uint32_t</span>*) ApplicationAddress); Jump_To_Application(); } } } }</code></pre> <strong>BOOTLOADER中断程序</strong><br><p><br></p><pre style="max-width: 100%;"><code class="cpp hljs" codemark="1"><span class="hljs-keyword">extern</span> <span class="hljs-keyword">char</span> timer4_over_flag; <span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">TIM4_IRQHandler</span><span class="hljs-params">(<span class="hljs-keyword">void</span>)</span> </span>{ <span class="hljs-comment">// TIM_ClearITPendingBit(TIM4,TIM_IT_Update);</span> <span class="hljs-keyword">if</span>(TIM_GetITStatus(TIM4, TIM_IT_Update)==SET) { TIM_ClearITPendingBit(TIM4, TIM_FLAG_Update); TIM_Cmd(TIM4,DISABLE); <span class="hljs-comment">//JUMP TO APP</span> timer4_over_flag=<span class="hljs-number">1</span>; } } <span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">USART1_IRQHandler</span><span class="hljs-params">(<span class="hljs-keyword">void</span>)</span> </span>{ <span class="hljs-keyword">if</span>(USART_GetITStatus(USART1,USART_IT_TC)==SET) { USART_ClearITPendingBit(USART1,USART_IT_TC); } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span>(USART_GetITStatus(USART1,USART_IT_RXNE)==SET) { USART_ClearITPendingBit(USART1,USART_IT_RXNE); UartIn((u8)USART_ReceiveData(USART1)); } } </code></pre> <br> <strong>蜂鸣器是使用TIMER1 PWM输出驱动</strong><br> <br><p><br></p><pre style="max-width: 100%;"><code class="cpp hljs" codemark="1"><span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">BeepTimerInit</span><span class="hljs-params">(<span class="hljs-keyword">void</span>)</span> </span>{ TIM_TimeBaseInitTypeDef tim1={<span class="hljs-number">307</span>,TIM_CounterMode_Up,<span class="hljs-number">39</span>,TIM_CKD_DIV1,<span class="hljs-number">0</span>}; TIM_OCInitTypeDef oc; RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE); TIM_DeInit(TIM1); TIM_TimeBaseInit(TIM1,&amp;tim1); TIM_ClearITPendingBit(TIM1, TIM_FLAG_Update); oc.TIM_OCMode = TIM_OCMode_PWM1; oc.TIM_OutputState = TIM_OutputState_Enable; oc.TIM_Pulse = <span class="hljs-number">0</span>; oc.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM1,&amp;oc); TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable); TIM_ARRPreloadConfig(TIM1, ENABLE); TIM_Cmd(TIM1,ENABLE); TIM_CtrlPWMOutputs(TIM1, ENABLE); }</code></pre><br> <br><p> 用IAP升级之后,读出FLASH 0x8003000~0x801ffff来和application升级文件比较,是一样的</p><br> <strong>问题是,升级之后蜂鸣器没声音,其它功能都正常,希望大家帮忙分析下</strong> <p><br></p>
2条回答
zhjc2015
1楼 · 2019-12-21 19:47.采纳回答
跳转之前deinit一下对应的timer
zhjc2015
2楼-- · 2019-12-21 18:00
 精彩回答 2  元偷偷看……

一周热门 更多>