lpc1768的PWM使用

//p2.0 pwm1.1

void ALS_Init(void)     //初始化

{

LPC_SC->PCONP |= (1<<1)|(1<<2)|(1<<15);//打开时钟

LPC_SC->PCLKSEL0 &= ~(3<<2);    //时钟25M

LPC_SC->PCLKSEL0 &= ~(3<<4);

//p2.0

LPC_PINCON->PINSEL4 &= ~(0X03L<<0);     //GPIO

LPC_PINCON->PINMODE4 &= ~(0X03L<<0);    //使能上拉

LPC_PINCON->PINMODE_OD2 &= ~(0X01<<1);  //推挽正常模式

P2dir(0) = 1;//输出

LPC_TIM1->TCR |= (1<<1);                        //复位定时器

LPC_TIM1->CTCR = 0x00;                          //定时器模式

LPC_TIM1->PC = 0X00;

LPC_TIM1->PR   = 25-1;                          //预分频,计数频率1m

LPC_TIM1->MR0  = 20;                            //25*100  2500 频率10K

LPC_TIM1->MR1  = 100;

LPC_TIM1->MCR |= ((1<<0)|(1<<3)|(1<<4));                //MR0与TC值匹配时将产生复位 产生中断 MR1匹配时产生中断 不复位

LPC_TIM1->IR  |= 0XFF;                          //清所有中断标志位

LPC_TIM1->TCR  = (1<<0);                        //启动定时器

NVIC_EnableIRQ(TIMER1_IRQn);

}

void ALS_Set_Duty(u8 duty)      //设置占空比

{

LPC_TIM1->TCR  = 0;                     //暂停定时器

if(duty >= 100)duty = 99;

if(duty == 0)duty = 1;

LPC_TIM1->MR0 = duty;

LPC_TIM1->TCR  = (1<<0);                        //启动定时器

}

void ALS_Stop(void)

{

LPC_TIM1->TCR  = 0;                     //暂停定时器

P2low(0) = 1;                           //电平恒定

}

void TIMER1_IRQHandler(void)

{

NVIC_ClearPendingIRQ(TIMER1_IRQn);

if( LPC_TIM1->IR &0x01) //mr0中断

{

P2low(0) = 1;

LPC_TIM1->IR |= (1<<0);         //清中断标志

}

else if(LPC_TIM1->IR &0x02)

{

P2high(0) = 1;

LPC_TIM1->IR |= (1<<1);         //清中断标志

}

}

时间: 2024-10-14 05:14:07

lpc1768的PWM使用的相关文章

基于tiny4412的Linux内核移植 -- PWM子系统学习(八)

作者信息 作者: 彭东林 邮箱:[email protected] QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本:Linux-4.4.0 (支持device tree) u-boot版本:友善之臂自带的 U-Boot 2010.12 (为支持uImage启动,做了少许改动) busybox版本:busybox 1.25 交叉编译工具链: arm-none-linux-gnueabi-gcc (gcc version 4

CC1310生成PWM波

工作中因为时间紧迫,我不得不抛开TI提供的TI-RTOS.sdk和xdctools等工具,采用ucos + 库函数的方式去开发.最开始一头扎进去,碰见的就PWM的生成. PWM方面,TI自带封装好了PWM函数进行pwm的生成. 假如:我的需求是PWM的周期是2s,占空比50%,MCU主频是48MHz.于是我直接设置 params.periodUnits = PWM_PERIOD_US; params.periodValue = pwmPeriod; params.dutyUnits = PWM_

HAL之PWM

PWM是定时器的一个输出功能,要分配在有对应输出的管脚上.分频和定时值决定了周期,捕获寄存器的值就是占空比,当计数寄存器的值小于捕获值时输出固定电平(H),当大于时翻转电平,当计数器值溢出时将重载值载入,此时继续翻转电平. 一 在stm32cubeMX中线在有对应PWM输出的引脚设置PWM功能 二 在外设功能TIMx的对应通道上设置PWM模式 三在定时器配置时设置分频值,定时值,如果设置paulse则为固定pwm输出:或者这里不设置写一个设置函数,然后在while中不断修改paulse,则Pau

STM32定时器输出PWM频率和步进电机控制速度计算

1.STM32F4系列定时器输出PWM频率计算 第一步,了解定时器的时钟多少: 我们知道AHP总线是168Mhz的频率,而APB1和APB2都是挂在AHP总线上的. (1)高级定时器timer1, timer8以及通用定时器timer9, timer10, timer11的时钟来源是APB2总线(2)通用定时器timer2~timer5,通用定时器timer12~timer14以及基本定时器timer6,timer7的时钟来源是APB1总线 从STM32F4的内部时钟树可知: 当APB1和APB

51单片机模拟PWM调制控制实验

-------------------------------------------- PWM(脉冲宽度调制) 对模拟信号电平进行数字编码的方法 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 设计要求: 由于AT89系列单片机没有PWM控制器,所以

51单片机PWM

由定时器产生PWM信号,可手动按键调节PWM的占空比,按键由外部中断实现 #include <reg51.h> #include <intrins.h> #define CYCLE 6000 //周期6000 * 1us = 6ms #define SCALE (CYCLE / 100) //比例 1% #define ONE 0x10 #define TWO 0x01 #define THREE 0x40 #define FOUR 0x04 typedef unsigned ch

STM32中的PWM的频率和占空比的设置

转于http://blog.csdn.net/liming0931/article/details/8491468 下面的这个是stm32的定时器逻辑图,上来有助于理解: TIM3的ARR寄存器和PSC寄存器, 确定PWM频率.这里配置的这两个定时器确定了PWM的频率,我的理解是:PWM的周期(频率)就是ARR寄存器值与PSC寄存器值相乘得来,但不是简单意义上的相乘,例如要设置PWM的频率参考上次通用定时器中设置溢出时间的算法,例如输出100HZ频率的PWM,首先,确定TIMx的时钟,除非APB

STM32F0xx_TIM输出PWM配置详细过程

前言 前面我说过STM32的定时器功能很强大,今天就来总结一下它的另外一个“强大”功能:TIM的比较输出功能,输出可调PWM波形.直接调用函数接口“TIM2_CH1_PWM(uint32_t Freq, uint16_t Dutycycle)”传入频率和占空比就能输出指定的波形. 我提供的软件工程直接调用是比较简单就能实现想要的PWM波形.但是,如果你是学习者,建议还是进去函数把每一个细节了解清楚,里面的东西可能对你掌握TIM很有帮助. 本着免费分享的原则,如果你觉得分享的内容对你有用,认可我分

5、CC2541芯片中级教程-OSAL操作系统(PWM+看门狗)

本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 中级教程-OSAL操作系统(OSAL系统解基本套路) 中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系统驱动层和应用层不一样~ 中级教程-OSAL操作系统(ADC-光敏电阻) OSAL操作系统-实验16 串口波特率扩展 OSAL操作系统-实验1