神舟IV学习笔记(三)蜂鸣器与串口1打印
2017-02-17 来源:eefocus
今天多学习几个模块,首先是蜂鸣器。板上所用的是无源蜂鸣器,可以用直流电压直接驱动。还有一种叫有源蜂鸣器,要使用频率的方波才能驱动。
使用的蜂鸣器的驱动电压,典型值为5V,额定工作电流为30mA。STM32的GPIO管脚绝大多数能承受5V的电压,但是承受的电流最多为25mA,还需要使用三极管将电流放大,并且采用了一个限流电阻。我们把与蜂鸣器的GPIO设置为推挽输出,当输出1时,蜂鸣器响。当输出0时蜂鸣器灭。下面是我封装的文件:
BEEP.C
#include 'beep.h'
void BEEP_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //打开时钟
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 BEEP GPIO_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
串口模块。串口是电脑常用的设备,虽然笔记本上没有串口,使用USB转串口线就相当有串口的功能。串口简单容易实现,常常用于程序的打印显示等等。串口属于串行通信协议,大体指的是在一个线上传递多位数据,像SPI/I2C/USB都属于串行通信协议。串口模式通常使用3根线:(1)地GND,(2)发送TXD,(3)接收RXD。编程的时候只需配置好波特率,常用的是9600,意思就是每秒发生9600bit,我们知道一个字节等于8个比特位,如果要采集卡要传输1M个unsigned char的数据,大约要二十多分钟。当然我们可以把波特率提高,STM32最高能支持4.5M/S,但是速度增加,传输的距离将速度,误码率会提高。
软件编程的时候我们首先:打开相应功能的时钟,比如使用到串口一引脚的GPIOA时钟和串口一时钟USART1。然后我们对引脚和串口进行相应的配置。最后调用库函数写相应的功能。简单而言就是:时钟—配置—功能。STM32有一优势是,对于不同芯片有些功能对应的引脚是相同的。比如串口一,我发现大多数都是对于PA9和PA10的。在IAR环境中,如果要使用printf,需要进行如下的设置。好像IAR对puts不是很支持,打印字符用printf还行,最后是效果图。