打印

stm8l串口问题

[复制链接]
4920|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yuli0000|  楼主 | 2012-8-12 20:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为什么用stm8l(usart1)接收能正常接收  而发送时DR寄存器的值就没有改变 不能正常发送

//#include "stm8l15x.h"
#include "stm8l15x_conf.h"

unsigned char Buf;

void delayms(unsigned int x)
{
        unsigned int j=0,i=0;
        for(;i<x;i++)
                for(;j<65535;j++);
}

main()
{
        GPIO_TypeDef GPIO_Struct;
       
        GPIO_DeInit(&GPIO_Struct);
        GPIO_Init(GPIOB,(GPIO_Pin_4|GPIO_Pin_5),GPIO_Mode_Out_PP_Low_Fast);
        //GPIO_Init(GPIOC,GPIO_Pin_2 | GPIO_Pin_3,GPIO_Mode_Out_PP_Low_Slow);        
        //GPIO_ExternalPullUpConfig(GPIOC,GPIO_Pin_2 | GPIO_Pin_3,ENABLE);
        GPIO_Write(GPIOB,0x10);
        GPIO_Init(GPIOC,GPIO_Pin_2,GPIO_Mode_In_PU_No_IT);
        GPIO_Init(GPIOC,GPIO_Pin_3,GPIO_Mode_Out_PP_Low_Fast);
        CLK_PeripheralClockConfig(CLK_Peripheral_USART1,ENABLE);
       
        USART_DeInit(USART1);
        USART_Init(USART1,9600,USART_WordLength_8b,USART_StopBits_1,USART_Parity_No,(USART_Mode_TypeDef)(USART_Mode_Rx|USART_Mode_Tx));
        //USART_ClockInit(USART1,USART_Clock_Disable,USART_CPOL_Low,USART_CPHA_2Edge,USART_LastBit_Disable);
        //USART_ClearITPendingBit(USART1,USART_IT_RXNE);
        //USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
        USART_Cmd(USART1,ENABLE);
       
        GPIO_Write(GPIOB,0x20);
        //enableInterrupts();
        //rim();
      USART_SendData8(USART1,0x22);
      USART_SendData8(USART1,0x22);
        while (1)
        {               
                        while(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)==RESET);
                        Buf=USART_ReceiveData8(USART1);
                        while((USART1->SR&0x80)==0x00);
                        USART_SendData8(USART1,Buf);

        }
}
沙发
yuli0000|  楼主 | 2012-8-12 20:02 | 只看该作者
调试时  当发送时串口寄存器DR没有改变   而如果是接受它能正常接收

使用特权

评论回复
板凳
IJK| | 2012-8-13 09:35 | 只看该作者
调试时  当发送时串口寄存器DR没有改变   而如果是接受它能正常接收
yuli0000 发表于 2012-8-12 20:02


这是正常现象。
因为STM8L 串口寄存器DR只有1个,发送和接收都用它。
LZ可以试试把 发送和接收短接起来,这样 串口寄存器DR 就随着发送数据而变化了。

当然,用示波器来监测发送数据线,更好。

使用特权

评论回复
地板
figo20042005| | 2012-8-13 22:41 | 只看该作者
LS说的有道理

使用特权

评论回复
5
xiaojuren| | 2014-4-20 23:41 | 只看该作者
                        while((USART1->SR&0x80)==0x00);
                        USART_SendData8(USART1,Buf);写反了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

2

帖子

0

粉丝