藍橋杯嵌入式蜂鳴器模塊和下載程序失敗對應的解決方案
蜂鳴器的初始化問題
在提供的使用手冊裏我們可以看到PB4對應的是蜂鳴器,但是在STM32提供的資料STM32_CN.pdf中,我們可以看到PB4與SWJ的JNTRST存在複用,所以我們要吧JNRST關掉,纔可以使用蜂鳴器模塊。
buzz.c
#include "buzz.h"
void Buzz_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//這個就是很重要的你可以理解爲,不用JTRST
//GPIO_PinRemapConfig這個函數在stm32f10x_gpio.h中
GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE);
}
buzz.h
#ifndef __BUZZ_H
#define __BUZZ_H
#include "stm32f10x.h"
#define Beep_On() GPIO_ResetBits(GPIOB,GPIO_Pin_4)
#define Beep_Off() GPIO_SetBits(GPIOB,GPIO_Pin_4)
void Buzz_init(void);
#endif
後面在main函數中,直接調用Beep_On();函數就可以響了。
下載程序失敗對應的解決方案
如果使用了蜂鳴器模塊或者某些特殊情況下,可能會存在程序下載不進去板子的情況。這是因爲你前面把SWJ的JTRST給關掉了,因此會導致下載不進去。因此你需要先按着板子的復位鍵(RESET),然後點下載,然後緊接着迅速鬆開復位鍵,然後就可以下載進去了!