OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10091|回复: 7

STM8 UART和TIM2捕获同时使用时捕获数据异常

[复制链接]

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2013-8-2
在线时间
0 小时
发表于 2013-8-2 12:19:03 | 显示全部楼层 |阅读模式
小弟刚学STM8,用的是STM8S208RB, 开发环境是IAR, 使用的内部2M HSI时钟,用TIM2捕获外部方波然后用TIM1 PWM输出没有问题,输入方波频率是多少就输出的多少,但是这个时候只要使用UART,捕获数据就不正常了,不论输入频率怎么变,输出的几乎是一个固定频率值,这时将捕获到的数据通过UART1输出到调试助手,计算捕获到的数据,确实是捕获数据有问题,TIM1 的PWM没问题。单独使用UART1也是没问题的,我看了UART和TIM的时钟,数据手册上时钟树看两者都是单独分开的,不知道什么原因了,望大侠指点一下。

TIM2捕获配置
 void stm8_tim2_capture(void)
{
    TIM2_PSCR  = 0x01;//1us 计数一次
    
    TIM2_ARRH = 0xff;
    TIM2_ARRL = 0xff; //最大计数值 
    
    TIM2_CNTRH = 0x00;
    TIM2_CNTRL = 0x00;
    
    TIM2_CCMR1 = 0x01;//配置通道1为输入
    
    TIM2_CR1 = 0x01;  //启动Tim2 向上计数模式    
    TIM2_CCER1 = 0x01;//上升沿捕获、使能捕获
    TIM2_SR1_CC1IF=0; //清捕获标志位  
}
UART1配置
void stm8_uart3(void)
{
    UART3_BRR2 = 0x00; //9600bps @2M
    UART3_BRR1 = 0x0D; //9600bps @2M
    UART3_CR3 = 0x00;  //1位停止位,不开启同步模式
    UART3_CR2 = 0x2C;  // 使能发送和接收功能,并开启接收中断
    UART3_CR1 = 0x00;  //8位数据,不使用奇偶效验,并且使能UART1
}
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-8-2 16:39:20 | 显示全部楼层
回复【楼主位】太平洋冲浪者:
---------------------------------
有没有用中断?
看你上面的代码,没问题啊.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2013-8-2
在线时间
0 小时
 楼主| 发表于 2013-8-2 17:37:40 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
只有UART开了个接受中断,为了避免中断导致问题,我在调试助手里是没给STM8发数据的,而且全局中断没有打开
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-8-2 17:43:29 | 显示全部楼层
你数据处理上,没问题吧?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2013-8-2
在线时间
0 小时
 楼主| 发表于 2013-8-3 12:30:05 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
我是直接把捕获到的数据给UART和TIM1的,中间没有处理,TIM2捕获到的数据给TIM1 WM输出都是没问题,这个时候只要用上UART 捕获到的数据和PWM的输出就不正常了,但是PWM输出方波的周期和捕获到的是一样的,所以我认为是捕获出了问题,记得有些单片机的UART波特率是由一个定时器产生的,在用UART的时候就不能用这个定时器,但是我看STM8的UART波特率不是由定时器产生的呀! 难道是时钟负荷了?  我用外部24M晶振再看看,若问题解决了,一定把方法共享出来,望大侠多多指点
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-8-3 12:40:27 | 显示全部楼层
回复【5楼】太平洋冲浪者:
---------------------------------
stm8的串口是有单独的波特率发生的,不需要定时器给他提供波特率.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-8-3 12:44:51 | 显示全部楼层
给你一个我的输入捕获例程参考下,TIM2_CH2的输入捕获.里面也有串口,相安无事,工作的很好的.

TIM2_CH2 输入捕获.rar

168.83 KB, 下载次数: 2257

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2013-8-2
在线时间
0 小时
 楼主| 发表于 2013-8-5 09:38:02 | 显示全部楼层
回复【7楼】正点原子:
--------------------------------
问题解决了,我把系统时钟切换到外部24M晶振就对了,应该是STM8内部时钟不稳定或是我硬件上引入了干扰的原因吧!之前因为没有修改选项字,一直没有启动了外部24M晶振。  非常感谢原子哥哈!  修改选项字也是看的你回的一个贴才知道的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 12:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表