轻松学ARM系列之玩转蜂鸣器

作者:熊老师,华清远见嵌入式学院讲师。

今天我们来学习轻松学arm系列之玩转蜂鸣器,基于arm的cortex_a8内核的三星S5PV210开发平台。

那么我们来看一下如何学习使用pwm控制蜂鸣器?

一、总体架构图

搞定蜂鸣器之前需要我们对三星的GPIO简介的相关章节有一定的了解,主要是timer 定时器。

二、玩转定时器的几个要领

2.1 查看开发板上蜂鸣器的连接的原理图

蜂鸣器对应的原理图

核心板的对应的原理图

2.2 选中GPD0CON配置寄存器的xpwmTOUT1功能

GPD0.GPD0CON = ((~(0xf 0))& GPD0CON)| (0x2 << 4);选为pwm输出功能

2.3 配置预分频和分频寄存器的配置

配置预分频的值,TIMER.TCFG0 = (TIME.TCFG0 & (~0xff)) | 0xff ;

预分频的值设置为255 + 1

配置分频的值为16分频:

TIMR.TCFG1 = (TIME.TCFG1 & (~0xf0))| (0x4 << 4);

2.4 设置缓冲计数器的寄存器值和缓冲比较器的值

工作原理:计数器的值每隔一个时钟周期,做减1操作,如果减到值与比较器的值相等那么进行高低电平的转换,继续递减1,直到为0,那么翻转,实现了一个完整的方波周期

设置计数缓冲区寄存器值
        TIME.TCNTB1 = XXX; 设置总周期,一个pwm
        设置比较缓冲区寄存器值
        TIME.TCMPB1 = XXX/2; 设置是占空比

2.5 手动更新缓冲寄存器中的值到计数器中

设置pwm的步骤:

根据是1.3.15的第二步,先设置手动更新,在清除手动更新,启动定时器

手动更新,使缓冲器中的值更新到计数器中,双缓冲机制

TIME.TCON = TIME.TCON & (0x0e << 8) ; 0000 1110

清除手动更新位,启动定时器。 0000 1101  0x0d

TIME.TCON = TIME.TCON & (0x0d << 8) ;

文章来源: 华清远见嵌入式学院原文地址: http://www.embedu.org/Column/Column879.htm

更多相关嵌入式免费资料查看华清远见讲师博文>>



  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是一个简单的C语言程序,演示了如何使用串口控制蜂鸣器: ```c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <termios.h> #include <string.h> int main(int argc, char *argv[]) { int fd; struct termios oldtio, newtio; char buf[255] = {0}; // 打开串口 fd = open("/dev/ttySAC1", O_RDWR | O_NOCTTY); if (fd < 0) { printf("Open Serial Port Failed!\n"); return -1; } // 设置串口参数 tcgetattr(fd, &oldtio); memset(&newtio, 0, sizeof(newtio)); newtio.c_cflag = B115200 | CS8 | CLOCAL | CREAD; newtio.c_iflag = IGNPAR; newtio.c_oflag = 0; newtio.c_lflag = 0; newtio.c_cc[VTIME] = 0; newtio.c_cc[VMIN] = 1; tcflush(fd, TCIFLUSH); tcsetattr(fd, TCSANOW, &newtio); // 控制蜂鸣器 while (1) { memset(buf, 0, sizeof(buf)); read(fd, buf, sizeof(buf)); if (buf[0] == '1') { printf("Buzzer ON!\n"); // 控制蜂鸣器开启 // TODO: 在这里添加你的代码 } else { printf("Buzzer OFF!\n"); // 控制蜂鸣器关闭 // TODO: 在这里添加你的代码 } } // 关闭串口 close(fd); tcsetattr(fd, TCSANOW, &oldtio); return 0; } ``` 这个程序的主要思路是:首先打开串口 `/dev/ttySAC1`,然后设置串口通信参数,接着进入一个 while 循环,不断读取串口数据并判断,如果收到的数据是 `'1'`,则控制蜂鸣器开启,否则控制蜂鸣器关闭。需要注意的是,在程序中的 TODO 部分,你需要添加控制蜂鸣器的具体代码。 另外,你需要根据自己的实际情况修改串口设备文件名和波特率等参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值