标题:
STM32 TIM8 6路互补三相SPWM波形输出 源程序
[打印本页]
作者:
墨墨小可爱
时间:
2020-6-18 11:20
标题:
STM32 TIM8 6路互补三相SPWM波形输出 源程序
这是我之前写的STM32的SPWM波形程序,使用TIM8的三对互补端口进行波形产生。
单片机源程序如下:
#include "stm32f10x.h"
#include "SysTickDelay.h"
#include "misc.h"
#include "remote.h"
u32 Remote_Odr=0; //命令暂存
u8 Remote_Cnt=0; //按键按下次数
u8 Remote_Rdy=0; //红外接收到数据
/*****红外键盘初始化****/
void Remote_Init(void) //初始化
{
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 ; //选择引脚2
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出频率最大50MHz
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource10); //配置中断线路PC.2
EXTI_InitStructure.EXTI_Line = EXTI_Line10;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE; //使能中断
EXTI_Init(&EXTI_InitStructure);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断向量组2
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQChannel ;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应优先级0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
/**********检测脉冲宽度**************************************/
/**********最长脉宽5ms***************************************/
/**********返回值:x,代表x*20us*****************************/
u8 Pulse_Width_Check(void)
{
u8 t=0;
while(RDATA)
{
t++;delay_us(20);
if(t==250)return t;
}
return t;
}
/********中断处理程序*******************************/
void EXTI15_10_IRQHandler(void)
{
u8 res=0;
u8 OK=0;
u8 RODATA=0;
while(1)
{
if(RDATA)
{
res=Pulse_Width_Check();
if(res==250)break;
if(res>=200&&res<=250)OK=1;
else if(res>=85&&res<=200)
{
Remote_Rdy=1;
Remote_Cnt++;
break;
}
else if(res>=50&&res<=85)RODATA=1;
else if(res>=10&&res<=50)RODATA=0;
if(OK)
{
Remote_Odr<<=1;
Remote_Odr+=RODATA;
Remote_Cnt=0;
}
}
}
EXTI_ClearFlag(EXTI_Line10);
}
/********处理键盘*******************************/
/********返回相应键值*******************************/
u8 Remote_Process(void)
{
u8 t1,t2;
t1=Remote_Odr>>8;
t2=Remote_Odr;
Remote_Rdy=0;
if(t1!=(u8)~t2)return 'N';
switch(t1)
{ // 显示遥控上的字符按键
case 162: return 'M';
case 98: return 'U';
case 226: return'B';
case 34: return'L';
case 2: return'O';
case 194: return'R';
case 224: return'*';
case 168: return'D';
case 144: return'#';
case 104: return 0;
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
SPWM - TIM8三相六路输出.7z
(244.89 KB, 下载次数: 96)
2020-6-18 15:11 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
admin
时间:
2020-6-18 15:11
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1