OpenEdv-开源电子网

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

STM8S207C8T6串口3无法接收数据

[复制链接]

21

主题

125

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
260
金钱
260
注册时间
2013-1-10
在线时间
10 小时
发表于 2014-10-17 17:02:27 | 显示全部楼层 |阅读模式
5金钱
stm8s207c8t6串口3出现无法接受数据的现象  但定时器却能正常运行 下面是我的配置 看有错吗
 void TIM1_Init(void)
{
        TIM1_DeInit();                                          //定时器1相关寄存器复位
        /* param: 分频系数 向上计数 自动重载计数周期值 */
      //  TIM1_TimeBaseInit(64, TIM1_COUNTERMODE_UP, 125*100, 0);     //中断时间100ms 
         TIM1_TimeBaseInit(7, TIM1_COUNTERMODE_UP, 9999, 0);     //中断时间10ms  
        // TIM1_TimeBaseInit(8, TIM1_COUNTERMODE_UP, 1500, 0);     //中断时间ms  
        TIM1_ITConfig(TIM1_IT_UPDATE, ENABLE);  
        ITC_SetSoftwarePriority(ITC_IRQ_TIM1_OVF, ITC_PRIORITYLEVEL_2);//设置d定时器中断优先级 2  
        TIM1_Cmd(ENABLE); //使能TIM1
}

/*! @function
********************************************************************************
<RE>
函数名   :TIM2_Init
功能     :485通信管理50ms
说明     :Sys_Clk/(8)x(19999+1) = 20ms
*******************************************************************************/
void TIM2_Init(void)
{
      TIM2_DeInit();
      TIM2_TimeBaseInit(TIM2_PRESCALER_1, 125*20);//20ms中断
      TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE);          //使能中断
      ITC_SetSoftwarePriority(ITC_IRQ_TIM2_OVF, ITC_PRIORITYLEVEL_2);//设置d定时器中断优先级 2
      TIM2_Cmd(ENABLE);//使能定时器1 
 
}
void  UART_Init3()
{    
    UART3_DeInit();
    UART3_ITConfig(UART3_IT_TXE, DISABLE);                //关串口发送中断
    UART3_ITConfig(UART3_IT_TC , DISABLE);                //关串口发送结束中断
    UART3_ITConfig(UART3_IT_RXNE_OR, ENABLE); //使能溢出错误检测标志位 
    UART3_Init((u32)9600, UART3_WORDLENGTH_8D, UART3_STOPBITS_1, UART3_PARITY_NO, UART3_MODE_TXRX_ENABLE);
    UART3_Cmd(ENABLE);   //打开串口接收中断
}
  #pragma vector=ITC_IRQ_UART3_RX + 2
    
  __interrupt void Uart3RxdInt(void)
  { //此函数内已完成清中断标志
     u8  ret;
    if(UART3_GetITStatus(UART3_IT_RXNE)==SET)
    {
     tmp=UART3_ReceiveData8();
     ret=UART_KbdPkgRead(tmp);
     if(ret==0)
      {
      KBD_Flag_RECE=1;//当标志位为1时说明已经接收1包数据 定时器响应后判断此标志位
      }
   UART3_GetFlagStatus(UART3_FLAG_OR_LHE );
    }
  }
串口3和定时器1 2 的优先级都一样,求助

最佳答案

查看完整内容[请看2#楼]

我这里有个 我自己写的程序  你可以看一下   我用的是  寄存器版本的  毕竟STM8资源不是很多  就没用库了
个人博客www.xiaovdiy.cn
https://shop100764513.taobao.com/
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

23

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
295
金钱
295
注册时间
2014-2-16
在线时间
40 小时
发表于 2014-10-17 17:02:28 | 显示全部楼层
我这里有个 我自己写的程序  你可以看一下   我用的是  寄存器版本的  毕竟STM8资源不是很多  就没用库了

UART.rar

150.26 KB, 下载次数: 1719

回复

使用道具 举报

557

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165047
金钱
165047
注册时间
2010-12-1
在线时间
2102 小时
发表于 2014-10-18 00:44:34 | 显示全部楼层
帮顶。。。.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

23

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
295
金钱
295
注册时间
2014-2-16
在线时间
40 小时
发表于 2014-11-8 10:24:12 | 显示全部楼层


你这里禁止了串口中断


但是这里又是中断接收方式  怎么能接收的到呢?
关闭了 串口中断  现在你只能用查询的方式来判断是否接收到串口发来的信息了吧
回复

使用道具 举报

23

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
295
金钱
295
注册时间
2014-2-16
在线时间
40 小时
发表于 2014-11-8 10:27:28 | 显示全部楼层
还有就是  最好在中断结尾的时候  用USART_ClearITPendingBit  去除中断标志位
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2016-8-7
在线时间
1 小时
发表于 2016-8-7 17:56:10 | 显示全部楼层
假如爱有天意 发表于 2014-10-17 17:02
我这里有个 我自己写的程序&nbsp; 你可以看一下&nbsp;&nbsp; 我用的是&nbsp; 寄存器版本的&nbsp; 毕竟STM8 ...

while(UART3_SR&0X20==0);
这句是否有问题,我看寄存器里面是 数据没有收到时,第5位为0,数据已经收到第5就为1
那是不是应该改成while(!(UART3_SR&0X20));
串口发送搞好了,接收一直是各种问题没搞懂,看了你的程序收获颇多
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2016-8-7
在线时间
1 小时
发表于 2016-8-7 20:08:40 | 显示全部楼层
本帖最后由 jerryzhan 于 2016-8-7 20:11 编辑

我这样写,步进调试的时候没有问题,但是用run的时候,一旦字符串超过30,就会串口死掉了,不能再输入,而用步进的时候就没有这个问题,可以再输入请大侠看看问题在哪

UART1_CR2=0x2C;

char str[32];        
do
        {
        while(!(UART1_SR & 0x20));
        str = UART1_DR;
        i++;
        }while((str[i-1]!=0x0A)&(i<31));
        
        if(i==31)
                {
                printf("你输入的超出长度28,请重新输入");
                printf("\r\n");
                UART1_SR =0x00;
                UART1_CR2=0x00;        
                }        
                UART1_CR2=0x2C;



回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-6-29 05:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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