历史上的今天
返回首页

历史上的今天

今天是:2025年02月17日(星期一)

正在发生

2020年02月17日 | STM32基础PWM输出

2020-02-17 来源:eefocus

a)目的:基础PWM输出,以及中断配合应用。输出选用PB1,配置为TIM3_CH4,是目标板的LED6控制脚。

b)对于简单的PWM输出应用,暂时无需考虑TIM1的高级功能之区别。

c)初始化函数定义:

void TIM_ConfiguraTIon(void);//定义TIM初始化函数

d)初始化函数调用:

TIM_Configuration();//TIM初始化函数调用

e)初始化函数,不同于前面模块,TIM的初始化分为两部分——基本初始化和通道初始化:

void TIM_Configuration(void)//TIM初始化函数

{

TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;//定时器初始化结构

TIM_OCInitTypeDefTIM_OCInitStructure;//通道输出初始化结构

//TIM3初始化

TIM_TimeBaseStructure.TIM_Period = 0xFFFF;//周期0~FFFF

TIM_TimeBaseStructure.TIM_Prescaler = 5;//时钟分频

TIM_TimeBaseStructure.TIM_ClockDivision = 0;//时钟分割

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//模式

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);//基本初始化

TIM_ITConfig(TIM3, TIM_IT_CC4, ENABLE);//打开中断,中断需要这行代码

//TIM3通道初始化

TIM_OCStructInit(& TIM_OCInitStructure);//默认参数

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//工作状态

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//设定为输出,需要PWM输出才需要这行代码

TIM_OCInitStructure.TIM_Pulse = 0x2000;//占空长度

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//高电平

TIM_OC4Init(TIM3, &TIM_OCInitStructure);//通道初始化

TIM_Cmd(TIM3, ENABLE);//启动TIM3

}

f)RCC初始化函数中加入TIM时钟开启:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM3, ENABLE);

g)GPIO里面将输入和输出管脚模式进行设置。信号:AF_PP,50MHz。

h)使用中断的话在NVIC里添加如下代码:

//打开TIM2中断

NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel;//通道

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;//占先级

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//响应级

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//启动

NVIC_Init(&NVIC_InitStructure);//初始化

中断代码:

void TIM2_IRQHandler(void)

{

if (TIM_GetITStatus(TIM2, TIM_IT_CC4) != RESET)//判断中断来源

{

TIM_ClearITPendingBit(TIM2, TIM_IT_CC4);//清除中断标志

GPIO_WriteBit(GPIOB, GPIO_Pin_11, (BitAction)(1-GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_11)));//变换LED色彩

IC4value = TIM_GetCapture4(TIM2);//获取捕捉数值

}

}

i)简单应用:

//改变占空比

TIM_SetCompare4(TIM3, 变量);

j)注意事项:

管脚的IO输出模式是根据应用来定,比如如果用PWM输出驱动LED则应该将相应管脚设为AF_PP,否则单片机没有输出。

推荐阅读

史海拾趣

Electric Imp Inc.公司的发展小趣事

面对日益激烈的市场竞争和不断变化的市场需求,Electric Imp Inc.公司始终保持着敏锐的市场洞察力和持续的创新精神。公司不断推出新产品、新技术,以满足不同客户的需求。同时,公司还加强了内部管理和团队建设,提高了员工的专业素质和工作效率。这些努力使得公司能够保持持续的发展态势,并在电子行业中保持领先地位。

Britool Expert公司的发展小趣事

面对日益激烈的市场竞争和不断变化的市场需求,Electric Imp Inc.公司始终保持着敏锐的市场洞察力和持续的创新精神。公司不断推出新产品、新技术,以满足不同客户的需求。同时,公司还加强了内部管理和团队建设,提高了员工的专业素质和工作效率。这些努力使得公司能够保持持续的发展态势,并在电子行业中保持领先地位。

Heidenhain Corp公司的发展小趣事

在全球化背景下,海德汉公司不断拓展其国际市场版图。通过参加国际展会、建立海外分支机构等方式,海德汉成功将其高精度数控系统和自动化解决方案推向全球电子市场。特别是在亚洲、欧洲和北美等电子产业发达的地区,海德汉的产品和技术得到了广泛应用和认可。这一市场拓展战略不仅提升了海德汉的品牌知名度和市场份额,也为其在电子行业的长期发展奠定了坚实基础。

需要注意的是,以上故事虽基于事实背景构建,但具体细节和案例可能有所虚构或简化,以符合问题要求和字数限制。

Component Research Co公司的发展小趣事

面对不断变化的电子市场和技术环境,Component Research Co始终保持创新精神。公司不断投入研发资金,加强技术研发团队建设,推动新技术、新产品的不断涌现。同时,公司还积极关注市场动态和客户需求变化,及时调整产品策略和市场策略。通过持续创新和市场拓展,Component Research Co在电子行业中保持了领先地位,并迎来了更加美好的未来。

这五个故事均基于电子行业的普遍现象和发展趋势,但具体情节和细节纯属虚构。如果需要更具体或更贴近实际的故事,建议参考真实公司的发展历程和案例。

BB公司的发展小趣事

BB公司的创始人是一位电子工程领域的杰出人才,他深知模拟集成电路在电子行业的巨大潜力。1956年,他在图森亚利桑那州的一个车库中创立了BB公司,开始了他的创业之路。尽管初期资金紧张,条件艰苦,但创始人凭借对技术的执着和对市场的敏锐洞察,成功研发出了一系列具有竞争力的模拟集成电路产品。他坚信,只要产品质量过硬,就能赢得市场的认可。正是这种远见和坚持,为BB公司的后续发展奠定了坚实基础。

Amveco Toroidal Power Products公司的发展小趣事

为了进一步扩大市场份额,Amveco公司积极寻求与行业内外的合作伙伴建立战略合作关系。公司与多家知名的电子设备制造商建立了长期稳定的合作关系,为其提供定制化的环形变压器解决方案。此外,公司还通过参加国际电子展会、建立海外销售网络等方式,积极开拓国际市场,实现了业务的全球化布局。

问答坊 | AI 解惑

自动洗狗机

法国一名企业家发明了一种自动洗狗机,主人只需选定洗涤方式和宠物狗的大小尺寸,按下“开始键”后机器就会自动完成浸湿、冲洗和烘干等一系列过程。狗狗就会在半个小时内“神奇大变身”——从又脏又臭变成干净蓬松。…

查看全部问答>

模拟软键盘输入

使用keybd_event函数模拟软键盘输入一个字符,和直接使用软键盘输入是有区别的, keybd_event产生的是键盘事件,而直接使用软键盘输入,使用的是SendVirtualKey和SendCharEvents,两者不一样。 有些应用程序不接受keybd_event,而只接受直接使用 ...…

查看全部问答>

关于nandflash里的MBR的问题

最近在分析freescal 的I.Mx27的eboot的code,有个问题请请教大侠: 我在分析 函数  ReadKernelRegionFromNand()的时候在这句上想不通了 // Read kernel region info from parameters         if(BP_ReadData(hPa ...…

查看全部问答>

经典C语言书籍【英文版】

本帖最后由 paulhyde 于 2014-9-15 09:01 编辑 经典C语言书籍【英文版】  …

查看全部问答>

msp430g2553 AD多通道单次转换程序

unsigned int result[4]; void init_ADC10() {      P1SEL|=BIT0+BIT3+BIT4+BIT5;      ADC10AE0|=BIT0+BIT3+BIT4+BIT5; // 使P1.0允许AD模拟输入信号   ADC10CTL0=ADC10ON+MSC+SREF_0;// ...…

查看全部问答>

msp430 uart 接收问题

小弟在做modbusrtu通信,使用149单片机定时发送数据帧,但是接收到到数据帧怎么都一样呢? resvbuf[0]——resvbuf[8]接收到的是一样的16进制数据,不知道什么原因,还望高手给予指点!!!谢谢 #pragma vector = TIMERA0_VECTOR __interrupt voi ...…

查看全部问答>

【LPC54100】UART DEBUG

board_api.h中给出了通过USART0输出DEBUG信息的函数DEBUGOUT(),实质是重定向到串口的printf: board.c中给出了USART0的初始化配置,可以看出波特率设为115200 因此在串口工具中选择相同的波特率,数据位为8。使用新唐的牛桥连接LPC54102的 ...…

查看全部问答>

近区场与远区场的区分

本帖最后由 平漂流 于 2016-7-18 15:30 编辑 有关电磁场的近区场与远区场的划分,目前看到了3个版本,一个是小于一个电磁波波长λ的是近区场,大于一个波长的是远区场;一个是小于3个波长的是近区场,大于三个波长的是远区场;最后一个是如下图所 ...…

查看全部问答>

STM32学习第八贴,有了位带,为啥还要有其他方式操作IO口,欢迎高手来喷,来指导

本帖最后由 long521 于 2017-7-13 10:21 编辑 最近空的时候,试着用STM32来操作一些简单的例程,发现IO的高低完全可以用位带这种方式就可以了,但是为什么还要用寄存器方式,还有库函数这种方式,库函数也很方便,只要一个函数执行一下就是高,另 ...…

查看全部问答>

求大神赐一张步进电机原理图

求大神赐一张步进电机原理图…

查看全部问答>