23299|14

210

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

STM8S103串口问题,两天了都 [复制链接]

用的芯片是STM8S103F3.
使用串口1,内部时钟,查询发送,中断或者查询接收
疑问:STM8的管教复用是不是,你配置了串口,那么相应的两个管脚IO就自动成为RXD和TXD?
现在的把收发两个管脚直接短路,程序里面一直在发送,用万用表测试电压为1.8V左右,估计是在不停地发送。我不发送的时候一直保持高电平。
现在怀疑是接收出了问题。
参考的是风驰的串口程序。


初始化程序,都是调用库函数
void Uart_init(void)
{
//  UART1_DeInit();
  UART1_Init((u32)19200, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_RX_ENABLE);
  UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);
  UART1_Cmd(ENABLE);
}


发送函数参考风驰的
void UART1_SendByte(u8 data)                                            //发送字节
{
    UART1_SendData8((unsigned char)data);
  /* Loop until the end of transmission */
  while (UART1_GetFlagStatus(UART1_FLAG_TXE) == RESET);
}

void UART1_SendString(u8* Data,u16 len)                             //发送指定长度的字符串
{
  u16 i=0;
  for(;i<len;i++)
    UART1_SendByte(Data);
}


接收函数,中断方式:
#pragma vector = ITC_IRQ_UART1_RX + 2
__interrupt void UART1_RX_IRQHandler(void)
{
  u8 Res;
  if(UART1_GetITStatus(UART1_IT_RXNE )!= RESET)  
  {/*接收中断(接收到的数据必须是0x0d 0x0a结尾)*/
    Res =UART1_ReceiveData8();
    /*(USART1->DR);读取接收到的数据,当读完数据后自动取消RXNE的中断标志位*/
    rx_buf[rx_counter] = Res;
    dis_num[1] = Res;
    rx_counter++;
  }
}

大家看看还有什么需要配置的吗?感觉是接收不到的问题。
此帖出自stm32/stm8论坛

最新回复

请教下  时钟里面要怎么初始化UART? 我也遇到这个问题了  详情 回复 发表于 2016-7-4 16:03
点赞 关注
 

回复
举报

210

帖子

0

TA的资源

纯净的硅(高级)

沙发
 
已经解决,是时钟里面初始化错误。关闭了UART的时钟,所以。。。。找了两天
此帖出自stm32/stm8论坛

点评

你好 我最近也在做uart 不过我的芯片是STM8S103F3 参考风驰的例子 但是程序一直在接收中段跳不出来 请问这是什么原因呢 @far @interrupt void UART1_RX_IRQHandler(void) { u8 Res; if(UART1_GetI  详情 回复 发表于 2014-7-11 11:53

赞赏

1

查看全部赞赏

 
 

回复

31

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
时钟都是默认开启的吧
此帖出自stm32/stm8论坛
 
 

回复

3238

帖子

5

TA的资源

五彩晶圆(中级)

4
 
公司项目需要,也在用STM8S103F3,风驰的芯片是207RB,他们的代码移植的话,需要改好多地方嘛?刚拿到片子,不太熟悉
此帖出自stm32/stm8论坛
 
个人签名淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

5
 
xingkong911 发表于 2012-4-25 00:14
已经解决,是时钟里面初始化错误。关闭了UART的时钟,所以。。。。找了两天

你好  我最近也在做uart  不过我的芯片是STM8S103F3  参考风驰的例子   但是程序一直在接收中段跳不出来  请问这是什么原因呢
@far @interrupt void UART1_RX_IRQHandler(void)
{
   u8 Res;
    if(UART1_GetITStatus(UART1_IT_RXNE)!= RESET)  
    {/*接收中断(接收到的数据必须是0x0d 0x0a结尾)*/
            Res =UART1_ReceiveData8();
            UART1_ClearITPendingBit(UART1_IT_RXNE);
        /*(USART1->DR);读取接收到的数据,当读完数据后自动取消RXNE的中断标志位*/
        if(( UART_RX_NUM&0x80)==0)/*接收未完成*/
        {
            if( UART_RX_NUM&0x40)/*接收到了0x0d*/
                {
                  //UART1_SendString("33333...",sizeof("33333..."));
                  if(Res!=0x0a) UART_RX_NUM=0;/*接收错误,重新开始*/
                  else  UART_RX_NUM|=0x80;        /*接收完成了 */
                }
        else /*还没收到0X0D*/
          {       
            if(Res==0x0d)
                    {
                                        UART_RX_NUM|=0x40;
                                        UART1_SendString("55555...",sizeof("55555..."));
                    }
            else
              {
                RxBuffer[UART_RX_NUM&0X3F]=Res ;
                UART_RX_NUM++;
                                UART1_SendString("33333...",sizeof("33333..."));
                                #if 1
                if( UART_RX_NUM>63)
                              {
                                                  UART_RX_NUM=0;/*接收数据错误,重新开始接收*/  
                                                UART1_SendString("   44444",sizeof("   44444"));
                              }
                                #endif
              }                 
                  }
        }         
       
        //UART1_SendString("666666",sizeof("666666"));
                }
  这是中段程序

此帖出自stm32/stm8论坛

点评

你用什么编译器?  详情 回复 发表于 2014-7-15 17:19
 
 
 

回复

210

帖子

0

TA的资源

纯净的硅(高级)

6
 
你用的什么编译器?
此帖出自stm32/stm8论坛
 
 
 

回复

210

帖子

0

TA的资源

纯净的硅(高级)

7
 
a234280158 发表于 2014-7-11 11:53
你好  我最近也在做uart  不过我的芯片是STM8S103F3  参考风驰的例子   但是程序一直在接收中段跳不出来  ...

你用什么编译器?


此帖出自stm32/stm8论坛

点评

STVP 已解决! 谢谢!  详情 回复 发表于 2014-7-22 10:58
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

8
 
xingkong911 发表于 2014-7-15 17:19
你用什么编译器?

STVP    已解决!  谢谢!
此帖出自stm32/stm8论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

9
 
我也遇到了这个问题,,请问是咋么解决的
此帖出自stm32/stm8论坛
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

10
 
开发环境使用的IAR 同样的问题,请问怎么解决的,问题是不能够接收,但是能够发送,采用的485通信,while(UART1_GetFlagStatus(UART1_FLAG_RXNE) != SET)程序一直卡在这里。
此帖出自stm32/stm8论坛

点评

while(UART1_GetFlagStatus(UART1_FLAG_RXNE) != SET)我也调试过这句真心不好用,换个标志位吧  详情 回复 发表于 2015-10-26 08:32
 
 
 

回复

483

帖子

0

TA的资源

纯净的硅(初级)

11
 
水滴滴水 发表于 2015-10-24 18:27
开发环境使用的IAR 同样的问题,请问怎么解决的,问题是不能够接收,但是能够发送,采用的485通信,while(U ...

while(UART1_GetFlagStatus(UART1_FLAG_RXNE) != SET)我也调试过这句真心不好用,换个标志位吧
此帖出自stm32/stm8论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

12
 
水滴滴水 发表于 2015-10-24 18:27
开发环境使用的IAR 同样的问题,请问怎么解决的,问题是不能够接收,但是能够发送,采用的485通信,while(U ...

我也遇到这个问题 请问您解决了吗
此帖出自stm32/stm8论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

13
 
yl20084784 发表于 2015-10-26 08:32
while(UART1_GetFlagStatus(UART1_FLAG_RXNE) != SET)我也调试过这句真心不好用,换个标志位吧

请问你是怎么解决的?
此帖出自stm32/stm8论坛

点评

抱歉,不是天天登录这个网站,我当时是换了个标志位来检测的,RX 还是NE哦,我的感觉是stm32是便宜,但是你要是用的比较高级,深入了,各种问题就来了  详情 回复 发表于 2016-1-7 10:18
 
 
 

回复

483

帖子

0

TA的资源

纯净的硅(初级)

14
 
roceyulcy 发表于 2015-12-29 11:01
请问你是怎么解决的?

抱歉,不是天天登录这个网站,我当时是换了个标志位来检测的,RX 还是NE哦,我的感觉是stm32是便宜,但是你要是用的比较高级,深入了,各种问题就来了
此帖出自stm32/stm8论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

15
 
xingkong911 发表于 2012-4-25 00:14
已经解决,是时钟里面初始化错误。关闭了UART的时钟,所以。。。。找了两天

请教下  时钟里面要怎么初始化UART? 我也遇到这个问题了
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表