神舟IV學(xué)習(xí)筆記(三)蜂鳴器與串口1打印
今天多學(xué)習(xí)幾個(gè)模塊,首先是蜂鳴器。板上所用的是無(wú)源蜂鳴器,可以用直流電壓直接驅(qū)動(dòng)。還有一種叫有源蜂鳴器,要使用頻率的方波才能驅(qū)動(dòng)。
使用的蜂鳴器的驅(qū)動(dòng)電壓,典型值為5V,額定工作電流為30mA。STM32的GPIO管腳絕大多數(shù)能承受5V的電壓,但是承受的電流最多為25mA,還需要使用三極管將電流放大,并且采用了一個(gè)限流電阻。我們把與蜂鳴器的GPIO設(shè)置為推挽輸出,當(dāng)輸出1時(shí),蜂鳴器響。當(dāng)輸出0時(shí)蜂鳴器滅。下面是我封裝的文件:
BEEP.C
#include "beep.h"
void BEEP_Configuration(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //打開時(shí)鐘
GPIO_InitStructure.GPIO_Pin =BEEP ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
BEEP.H
#ifndef __BEEP_H
#define __BEEP_H
#include "stm32f10x_conf.h"
#define BEEPGPIO_Pin_3
#define BEEP_ON()GPIOA->BRR = BEEP
#define BEEP_OFF()GPIOA->BSRR = BEEP
//#define BEEP_ON() GPIO_ResetBits(GPIOA, BEEP)
//#define BEEP_OFF() GPIO_SetBits(GPIOA, BEEP)
void BEEP_Configuration(void);
#endif
串口模塊。串口是電腦常用的設(shè)備,雖然筆記本上沒有串口,使用USB轉(zhuǎn)串口線就相當(dāng)有串口的功能。串口簡(jiǎn)單容易實(shí)現(xiàn),常常用于程序的打印顯示等等。串口屬于串行通信協(xié)議,大體指的是在一個(gè)線上傳遞多位數(shù)據(jù),像SPI/I2C/USB都屬于串行通信協(xié)議。串口模式通常使用3根線:(1)地GND,(2)發(fā)送TXD,(3)接收RXD。編程的時(shí)候只需配置好波特率,常用的是9600,意思就是每秒發(fā)生9600bit,我們知道一個(gè)字節(jié)等于8個(gè)比特位,如果要采集卡要傳輸1M個(gè)unsigned char的數(shù)據(jù),大約要二十多分鐘。當(dāng)然我們可以把波特率提高,STM32最高能支持4.5M/S,但是速度增加,傳輸?shù)木嚯x將速度,誤碼率會(huì)提高。
軟件編程的時(shí)候我們首先:打開相應(yīng)功能的時(shí)鐘,比如使用到串口一引腳的GPIOA時(shí)鐘和串口一時(shí)鐘USART1。然后我們對(duì)引腳和串口進(jìn)行相應(yīng)的配置。最后調(diào)用庫(kù)函數(shù)寫相應(yīng)的功能。簡(jiǎn)單而言就是:時(shí)鐘—配置—功能。STM32有一優(yōu)勢(shì)是,對(duì)于不同芯片有些功能對(duì)應(yīng)的引腳是相同的。比如串口一,我發(fā)現(xiàn)大多數(shù)都是對(duì)于PA9和PA10的。在IAR環(huán)境中,如果要使用printf,需要進(jìn)行如下的設(shè)置。好像IAR對(duì)puts不是很支持,打印字符用printf還行,最后是效果圖。