本文以STM8S103F3P6编程为例,介绍如何在STM8S103F3P6中利用tim2发送PWM tim1捕获周期。
电脑平台:Windows7 64位旗舰
编译软件:IAR
硬件平台:STM8S103F3P6
1.系统时钟初始化为内部16M
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); //初始化时钟为内部时钟1分频及16MHz
2.TIM2发送PWM
1).初始化tim2
void Init_Timer2(void)
{
GPIO_Init(GPIOD, GPIO_PIN_4, GPIO_MODE_OUT_PP_LOW_FAST); //初始化引脚为 输出推拉,低电平,10MHz
TIM2_DeInit(); //定时器2寄存器恢复到默认状态
TIM2_TimeBaseInit(TIM2_PRESCALER_16, 10000); //16分频, 1MHZ 10000 = 10ms F= 100hz
TIM2_OC1Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE, 5000, TIM2_OCPOLARITY_HIGH); //占空比50%
TIM2_Cmd(ENABLE); //使能定时器2
}
2).波形如下图
PWM发送成功。
3.TIM1捕获
1).初始化tim1
void Init_Timer1(void)
{
GPIO_Init(GPIOC, GPIO_PIN_3, GPIO_MODE_IN_FL_NO_IT); //输入浮动,没有外部中断
TIM1_DeInit(); //tim1 定时器寄存器全部复位
TIM1_TimeBaseInit(0x0f, TIM1_COUNTERMODE_UP, 10000, 0);// 10ms 100hz 设置时间分频 向上计数 20000代表自动重装载计数值 0~20001溢出
TIM1_ICInit(TIM1_CHANNEL_3, TIM1_ICPOLARITY_RISING, TIM1_ICSELECTION_DIRECTTI, TIM1_ICPSC_DIV1, 0x00); //设置通道 设置输入捕获上升触发 捕获输入引脚 输入捕捉预定标器 滤波
TIM1_ClearFlag(TIM1_FLAG_CC3); //指定要清除的标志
TIM1_ITConfig( TIM1_IT_CC3 , ENABLE); //去掉是查询方式,否则是中断方式
TIM1_ITConfig( TIM1_IT_UPDATE, ENABLE); //使能向上计数 功能
TIM1_CCxCmd(TIM1_CHANNEL_3, ENABLE); //使能输入捕获通道3
TIM1_Cmd(ENABLE); //使能定时器
}
2).中断服务函数
unsigned char fe //全局变量定义
INTERRUPT_HANDLER(TIM1_UPD_OVF_TRG_BRK_IRQHandler, 11)
{
fe++;
TIM1_ClearITPendingBit(TIM1_IT_UPDATE);
}
INTERRUPT_HANDLER(TIM1_CAP_COM_IRQHandler, 12)
{
if(TIM1_GetITStatus(TIM1_IT_CC3) != RESET) //如果CH3边沿触发
{
static uint8_t buf[6];
static uint16_t set_num1,set_num2;
static uint8_t timer1,timer2;
static uint8_t num;
uint8_t len = 0;
uint16_t fre = 0;
num++;
if(num == 1)
{
set_num1 = TIM1_GetCapture3();
timer1 = fe;
}
else if(num == 2)
{
num = 0;
set_num2 = TIM1_GetCapture3();
timer2 = fe;
fe = 0;
fre = 1000000 / ((timer2*10000+set_num2) - (timer1*10000+set_num1));
buf[len++]=fre/10000%10+'0';
buf[len++]=fre/1000%10+'0';
buf[len++]=fre/100%10+'0';
buf[len++]=fre/10%10+'0';
buf[len++]=fre%10+'0';
buf[len++]= 'n';
UART1_Send(buf,6);
}
}
TIM1_ClearITPendingBit(TIM1_IT_CC3); //清除标志位
}
3).结果如下图
输入的是100Hz,结果采集的是100Hz ,实验成功。
备注:初始化后别忘了开总中断
enableInterrupts();
上一篇:STM8S103之串口查询发送+中断发送
下一篇:STM8硬件IIC从机
推荐阅读最新更新时间:2024-11-01 14:50
设计资源 培训 开发板 精华推荐
- AM30EW-2405SZ 5V 双路输出 DC/DC 转换器的典型应用
- LTC1517CS5-3.3 演示板、微功率稳压电荷泵 DC/DC 转换器
- C5157210_WM8960音频驱动方案验证板
- LTC3456 的典型应用 - 具有 USB 电源管理器的 2 节、多输出 DC/DC 转换器
- L7812C输出稳压电路的典型应用
- LT3973EMSE-3.3、3.3V 降压转换器的典型应用,适用于汽车应用
- LT8609EMSE 3.3V 降压型稳压器的典型应用电路
- DC473A,基于 LTC1702ACGN 高效双路输出电源的演示板,3V 至 7Vin,1.8Vout @ 5A 和 2.5Vout @ 5A
- ADM1065ASUZ超级定序器和监视器的典型应用电路
- 使用 Analog Devices 的 ADUC7033BCPZ-8L 的参考设计
- 趣味电子技术史话栏目开播啦!第一集:白炽灯到底是谁发明的?
- ADI & WT ·世健 MCU 痛点问题探索季 ——第二站:直播 | MCU应用难题全力击破!
- 直播|基于英特尔® Agilex™ FPGA的PCIe Gen5和CXL解决方案
- 评论有礼:用混合信号示波器探索总线的秘密
- 直播预约 | 汽车圈盛会!第二届英飞凌汽车创新峰会(IACE)全程直播
- 体积小、功耗低、安全性高,专用加密芯片ATSHA204 精彩专题,答题有好礼!
- Sitara™ AM335x ARM® Cortex™-A8 团购
- 大学堂学分闪亮登场 看谁率先登上光荣榜!
- 看是德科技X8711A 物联网设备功能测试解决方案,答题赢好礼