⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 ARM里实现 PWM ARM经典 C语言写的
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2004-09-16
** Last Version:		1.0
** Descriptions:		The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by:			zhangmingjie
** Created date:		2007-3-26
** Version:				1.0
** Descriptions:		双边沿PWM输出实验。
**------------------------------------------------------------------------------------------------------
** Modified by:			wuzhijian
** Modified date:		2007-09-03
** Version:				
** Descriptions:		对程序的风格以及注释略作调整,并检查代码。
**
** Rechecked by:		Litiantian	
********************************************************************************************************/
#include "config.h"

#define	  tmp1		Fpclk / 100

/*********************************************************************************************************
** 函数名称:  IO_Init
** 函数功能:  初始化I/O口,设P3.17、P1.6、P1.11为双边沿输出
** 入口参数:  无
** 出口参数:  无
*********************************************************************************************************/
void IO_Init(void)
{
	PINSEL7 = (PINSEL7 & (~(0x03 << 2)))  | (0x02 << 2);	// P3.17连接到PWM0.2(PWM2)
	PINSEL2 = (PINSEL2 & (~(0x03 << 12))) | (0x03 << 12);	// P1.6连接到PWM0.4(PWM4)
	PINSEL2 = (PINSEL2 & (~(0x03 << 22))) | (0x03 << 22);	// P1.11连接到PWM0.6(PWM6)
}

/*********************************************************************************************************
** 函数名称:  PWM_Dbl_Init
** 函数功能:  初始化双边沿PWM输出。
** 入口参数:  无
** 出口参数:  无
*********************************************************************************************************/
void PWM_Dbl_Init(void)
{
	uint32 tmp;
	tmp 	= Fpclk / 100;

	PWM0PR  = 0x09;			    // 对Fpclk进行分频,PWM计数频率为Fpclk的1/10
	PWM0MCR = 0x02;			    // PWMMR0与PWMTC匹配时复位PWMTC
	PWM0PCR = (1 << 2)  |	    // PWM2双边沿控制
		 	  (1 << 4)  |	    // PWM4双边沿控制
			  (1 << 6)  |	    // PWM6双边沿控制
			  (1 << 10) |	    // 使能PWM2输出
			  (1 << 12) |	    // 使能PWM4输出
			  (1 << 14);	    // 使能PWM6输出
	PWM0MR0 = tmp;			    // PWM速率控制/计数初值
	
	/* 设置双边沿脉冲的脉宽和位置 */
	PWM0MR1 = 0;			    // PWM2的置位位置
	PWM0MR2 = (tmp / 8) * 7;    // PWM2的复位位置

	PWM0MR3 = (tmp / 8) * 2;    // PWM4的置位位置
	PWM0MR4 = (tmp / 8) * 6;    // PWM4的复位位置

	PWM0MR5 = (tmp / 8) * 3;    // PWM6的置位位置
	PWM0MR6 = (tmp / 8) * 5;    // PWM6的复位位置
	 
	PWM0LER = 0x7F;			    // 锁存所有PWM匹配值
	PWM0TCR = 0x02;			    // 复位PWMTC
	PWM0TCR = 0x09;			    // 使能PWM
}

/*********************************************************************************************************
** 函数名称:  main
** 函数功能:  演示双边沿PWM现象。
** 入口参数:  无。
** 出口参数:  为0时表明函数出错。
** 函数说明:  需要用多通道示波器或者逻辑分析仪进行观察
*********************************************************************************************************/
int main(void)
{
	IO_Init();  			    // 初始化I/O口,设置P1.11、P1.6、P3.17为双边沿输出
	PWM_Dbl_Init();			    // 初始化双边沿PWM输出,设好了相关寄存器之后,相应的管脚就有相应的双边沿的PWM输出

	while (1);
    return (0);
}
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -