<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) & <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,&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,&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>
一周热门 更多>