【其他专项实践类】信息工程学院—— Linux与蜂鸣器

今天是实训的第七天,在课堂的开始,我们先复习了昨天学习到的内容并且讲解了作业。虽然课堂上感觉自己都听懂学会了,但是在实际操作中,我却总是有一些小地方出现错误,比如漏了符号或者格式不对,我还需要更加努力。

今天学习了串口实验中的编写程序和蜂鸣器实验(PWM定时器实验)。

串口初始化。初始化GPIO将引脚设置为串口功能,GPA1CON[3:0]=0x2 串口接收功能,GPA1CON[7:4]=0x2 串口发送功能;数据格式8N1(8位数据位,无校验值,1位停止位),ULCON2[6]=0x0正常工作方式,ULCON2[5:3]=0x0不进行校验,ULCON2[2]=0x0 1bit停止位,ULCON2[1:0]=0x3 8bit数据位;设置串口的工作方式为:轮询模式,UCON2[3:2] = 0x1,UCON2[1:0] = 0x1;设置波特率:115200,UBRDIV = 53,UFRACVAL2 = 5。

串口发送。轮训判断 串口发送器的缓冲区是否为空,UTRSTAT2[1] = 1 缓冲区为空,可以发送数据;UTRSTAT2[1] = 0 缓冲区不为空,不能发送数据。发送数据,UTXH2 = data;。

串口接收。轮训判断,串口接收器的缓冲区是否有数据,UTRSTAT2[0] = 1  缓冲区有数据,可以接收数据;UTRSTAT2[0] = 0,缓冲区没有数据,不能接收数据(继续等待)。接收数据,data = URXH2;。Linux系统下’/n’,Windows系统下’\r’’\n’。

蜂鸣器实验(PWM定时器实验)。分析蜂鸣器的电路,有源蜂鸣器和无缘蜂鸣器,需要注意的是这里的“源”不是电源,而指的是震荡源。“有源蜂鸣器”内部带有震荡源,所以只需要通电就会发出声音;“无源蜂鸣器”内部没有震荡源,所以需要依靠外部的驱动才能发出声音,需要2Khz ~ 5Khz的方波去驱动它。有源蜂鸣器价格更高,内部震荡源频率固定,因此只能发出固定的声音,程序控制简单;无源蜂鸣器价格便宜,可以改变外部驱动的频率,因此可以发出不同的声音,程序相对比较复杂。

定时器都有一个共同特点,它们都有一个定时计数器(TCNT),在刚开始工作时,需要给TCNT赋初始值。每经过一次时钟脉冲,TCNT的值减一,当减到等于0时,定时器会产生中断,告知CPU,定时完成。

PWM(Pulse Width Modulation),脉冲宽度调制。PWM定时器比普通的定时器多了一个比较计数器(TCMP)。在刚开始工作时,需要给TCNT和TCMP(TCMP <= TCNT)赋初始值。每经过一次时钟脉冲,TCNT的值减一。当TCNT == TCMP,PWM定时器输出的电平会实现翻转,继续输出;当TCNT == 0时,电平再次发生翻转,一个周期结束,开始下个周期。

占空比是PWM方波的一个周期内,高电平持续时间的占比。占空比=高电平时间/周期。应用范围是电机调速、控制无源蜂鸣器工作、控制灯的亮度、信号调制等。

今天也是收获满满的一天!