ARM接口编程—PWM(exynos 4412平台)

PWM简介

PWM(Pulse Width Modulation)即脉冲宽度调制,通过对脉冲的宽度进行调制,来获得所需要波形

PWM参数

  • 周期

一次高低电平所占用的时间

  • 占空比

一个周期中高电平时间与整个周期的比例称为占空比

PWM工作原理

pwm原理图

由电路原理图可知道蜂鸣器接在GPD0_0引脚上

GPIO配置

配置GPD0_0引脚为PWM模式,即TOUT_0

PWM控制器

这个寄存器用于配置一级分频值

这个寄存器用于配置二级分频

pwm控制寄存器

用于控制PWM的开始/停止

代码实现:

c 复制代码
#include "exynos_4412.h"

void Delay(unsigned int Time)
{
	while(Time --);
}

int main()
{
	/*1.将GPD0_0引脚设置成PWM0的输出引脚*/
	GPD0.CON = GPD0.CON & (~(0xF)) | (0x2);
	/*2.设置PWM0的一级分频	一级分频倍数设置为100倍*/
	PWM.TCFG0 = PWM.TCFG0 & (~(0xFF)) | 99;
	/*2.设置PWM0的二级分频	二级分频倍数设置为1倍  递减计数器递减频率 = PLCK / (99 + 1) / 1 = 1M*/
	PWM.TCFG1 = PWM.TCFG1 & (~(0xF));
	/*4.设置PWM0为自动重装载,使其能够产生连续的脉冲信号*/
	PWM.TCON = PWM.TCON | (1 << 3);
	/*5.设置PWM0的频率为500HZ*/
	PWM.TCNTB0 = 2000;
	/*6.设置PWM0的占空比为50%*/
	PWM.TCMPB0 = 1000;
	/*7.将TCNTB0中的值手动装载到递减计数器*/
	PWM.TCON = PWM.TCON | (1 << 1);
	/*8.关闭手动更新*/
	PWM.TCON = PWM.TCON & (~(1 << 1));
	/*9.使能PWM0,递减计数器开始递减*/
	PWM.TCON = PWM.TCON | 1;

	while(1)
	{
		PWM.TCON = PWM.TCON | 1;
		Delay(1000000);
		PWM.TCON = PWM.TCON & (~(1));
		Delay(1000000);		
	}
	return 0;
}
相关推荐
嵌入式×边缘AI:打怪升级日志13 小时前
环境监测传感器从设备程序设计(ADC采集与输出控制)
单片机·嵌入式硬件·fpga开发
张槊哲14 小时前
IIC时序图详解
单片机
Hello_Embed14 小时前
Modbus 传感器开发:STM32F030 串口编程
笔记·stm32·单片机·嵌入式·freertos·modbus
cameron_tt14 小时前
stm32智能垃圾桶
stm32·单片机·嵌入式硬件
犽戾武14 小时前
在 Quest 上用 OpenXR + MediaCodec + OES 外部纹理做一个“低延迟视频面板”(48小时的编码复盘)
linux·c++·嵌入式硬件·vr
myron668815 小时前
基于STM32LXXX的模数转换芯片ADC(ADS1110A0IDBVR)驱动C程序设计
c语言·stm32·嵌入式硬件
广药门徒15 小时前
PADS Layout里的条件筛选在Router里在哪找
嵌入式硬件
玩转单片机与嵌入式16 小时前
TinyML适合在哪些MCU上运行?怎么评估我们的MCU能不能运行TinyML?(赠评估手册)
单片机·嵌入式硬件
亿道电子Emdoor1 天前
【Arm】Keil MDK 的Symbols窗口
stm32·单片机·嵌入式硬件
myron66881 天前
基于STM32LXXX的模数转换芯片ADC(MCP3421A0T-E/CH)驱动C程序设计
c语言·stm32·嵌入式硬件