打印
[STM8]

串口的接收数据

[复制链接]
5077|32
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shaowei2072009|  楼主 | 2013-6-3 10:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "stm8s.h"
#include "stm8s_uart2.h"
#include "stm8s_gpio.h"
#include "stm8s_clk.h"
#include "stdio.h"

void Delay(u16 time)
{
  while(time != 0)
  {
    time--;
  }
}
//初始化串口   波特率115200,8位数据位 1位停止位,无奇偶校验
//查询发送,中断方式接收。
void UART_Init(void)
{
    UART2_DeInit();
    UART2->BRR2 = 0X01; //设置波特率为9600
    UART2->BRR1 = 0X34;
    UART2->CR2 = 0X2C;  //设置串口中断,允许接收发送
   // UART2_Cmd(ENABLE);
}


void Init_CLK(void)
{

  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV2);//设置主频为内部高速时钟,8MHz
}


void main(void)
{
  Init_CLK();
  enableInterrupts();
  UART_Init();
  while(1);
}       

#pragma vector=0x14
__interrupt void UART2_RX_IRQHandler(void)
{
   unsigned int temp;

   temp = UART2->DR;

   while((UART2->SR & 0x80) == 0x00);  //等待发送寄存器为空
   Delay(1);
   temp++;
   UART2->DR = temp;                    //接收到的数据加一发送回去
}                  
   这是我的源码,想把接收到的数据加一在发送出去,但是每次串口助手收到的数据跟发送的一样,要么就会出现乱码,都没成功过,是我的程序还是有什么地方要设置,请大神详解。。。。在线等待

沙发
grasswolfs| | 2013-6-3 10:41 | 只看该作者
能确定“串口助手收到的数据跟发送的一样”。这个数据是串口发出来的么?

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
shaowei2072009 + 3
板凳
shaowei2072009|  楼主 | 2013-6-3 10:51 | 只看该作者
grasswolfs 发表于 2013-6-3 10:41
能确定“串口助手收到的数据跟发送的一样”。这个数据是串口发出来的么? ...

这个不能确定,但是我每次修改数的值也是发送回相同的值.有什么方法确定这个数不是串口发出的呢?难道的用示波器看

使用特权

评论回复
地板
xiaolanghahaha| | 2013-6-3 10:57 | 只看该作者
最重要的是检查一下串口的波特率是不是完全一致,一定要保证完全一致才行

使用特权

评论回复
5
shaowei2072009|  楼主 | 2013-6-3 11:00 | 只看该作者
xiaolanghahaha 发表于 2013-6-3 10:57
最重要的是检查一下串口的波特率是不是完全一致,一定要保证完全一致才行 ...

波特率设置没有问题

使用特权

评论回复
6
grasswolfs| | 2013-6-3 11:03 | 只看该作者
shaowei2072009 发表于 2013-6-3 10:51
这个不能确定,但是我每次修改数的值也是发送回相同的值.有什么方法确定这个数不是串口发出的呢?难道的用 ...

你把里面的返向发回注释掉,看看还有没有这个数据,然后再在里面写一个固定的数据发回,看看能够正常发回?

使用特权

评论回复
7
shaowei2072009|  楼主 | 2013-6-3 11:37 | 只看该作者
grasswolfs 发表于 2013-6-3 11:03
你把里面的返向发回注释掉,看看还有没有这个数据,然后再在里面写一个固定的数据发回,看看能够正常发回 ...

写固定的数发不出去,我看UART寄存器的值没有发生变化,是不是没有进入中断。配置应该没得什么问题把。

使用特权

评论回复
8
mmuuss586| | 2013-6-3 11:55 | 只看该作者
8没玩过,只玩过M4

使用特权

评论回复
9
grasswolfs| | 2013-6-3 12:07 | 只看该作者
shaowei2072009 发表于 2013-6-3 11:37
写固定的数发不出去,我看UART寄存器的值没有发生变化,是不是没有进入中断。配置应该没得什么问题把。 ...

那说明确实你收到的不是串口发出来的,先看一下stm8串口官方的例程吧

使用特权

评论回复
10
shaowei2072009|  楼主 | 2013-6-3 12:20 | 只看该作者
grasswolfs 发表于 2013-6-3 12:07
那说明确实你收到的不是串口发出来的,先看一下stm8串口官方的例程吧

如果我接收到的数据,用IAR的寄存器查看器是否可以看到DR的值发生变化呢

使用特权

评论回复
11
grasswolfs| | 2013-6-3 12:22 | 只看该作者
shaowei2072009 发表于 2013-6-3 12:20
如果我接收到的数据,用IAR的寄存器查看器是否可以看到DR的值发生变化呢

你是说单片机内部接收么?如果接到了而且进入中断了,应该是能看到变化的

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
shaowei2072009 + 3
12
haitian5002| | 2013-6-3 12:44 | 只看该作者
你在中断中做太多事了,里面还有一个DELAY,肯定会影响接收和发送数据,建议先试试接收一段数据和发送一段数据,看看是否正常,正常了,可以再试接收后发送的情况,若是要接收一段数据的话,接收完了之后再置标志位,并在主程序中发送

使用特权

评论回复
13
shaowei2072009|  楼主 | 2013-6-3 12:55 | 只看该作者
grasswolfs 发表于 2013-6-3 12:22
你是说单片机内部接收么?如果接到了而且进入中断了,应该是能看到变化的 ...

那应该是没有进入中断,不然寄存器的值会发生变化的。

使用特权

评论回复
14
grasswolfs| | 2013-6-3 13:49 | 只看该作者
shaowei2072009 发表于 2013-6-3 12:55
那应该是没有进入中断,不然寄存器的值会发生变化的。

嗯,找一个例程看看吧,自己第一次写调不出来是非常正常的

使用特权

评论回复
15
shaowei2072009|  楼主 | 2013-6-3 13:59 | 只看该作者
grasswolfs 发表于 2013-6-3 13:49
嗯,找一个例程看看吧,自己第一次写调不出来是非常正常的

例程也看了,基本都是这么写,例程里都说可以,但是我的还是不行。郁闷啊,调了一天,也没弄对。无语

使用特权

评论回复
16
grasswolfs| | 2013-6-3 14:07 | 只看该作者
shaowei2072009 发表于 2013-6-3 13:59
例程也看了,基本都是这么写,例程里都说可以,但是我的还是不行。郁闷啊,调了一天,也没弄对。无语 ...

硬件是开发板么?还是自己做的,别的程序可以跑么?

使用特权

评论回复
17
shaowei2072009|  楼主 | 2013-6-3 14:48 | 只看该作者
grasswolfs 发表于 2013-6-3 14:07
硬件是开发板么?还是自己做的,别的程序可以跑么?

开发板,用的IAR编译器。其他的程序都是正常的,就是串口输出有问题,而且寄存器DR的都不会发生变化。

使用特权

评论回复
18
huiguang_1| | 2013-6-3 15:08 | 只看该作者
你先用示波器看一下,你确定有波形输出吗?

使用特权

评论回复
19
huiguang_1| | 2013-6-3 15:09 | 只看该作者
你程序其他部分有AD相关的配置没有?

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
shaowei2072009 + 2
20
huiguang_1| | 2013-6-3 15:10 | 只看该作者
AD_TDR这个寄存器是设置禁止施密特触发的,STM8的串口和采样口是复用的,采样口配置为禁止施密特触发了,可能会影响到你的串口功能。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
shaowei2072009 + 1
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

108

帖子

0

粉丝