求教,stm8如何去使用串口单线半双工模式呢?(解决了)

2019-12-22 13:44发布

本帖最后由 cyxavr 于 2012-12-20 08:49 编辑

    求教,stm8如何去使用串口单线半双工模式呢?
  因目前有一东东要用到一根线来收发数据,这里想到了,stm8的串口单线半双工,但怎么搞都是只能发不能收的。
  程序昨晚在家忘了拷过来了。
  还有串口一根线收发,那么电脑串口那端两根线的,如何去改成一根呢?
  有用过的大神们,指条明路走走。     
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
25条回答
cyxavr
2019-12-23 13:58

void uart_init(void)
{
     GPIOD->DDR |= GPIO_PIN_5;   //输出模式
   GPIOD->CR1 &= ~GPIO_PIN_5;   //浮动或漏极开路
   GPIOD->CR2 &= ~GPIO_PIN_5;//输出最大速度2MHZ


    UART1_DeInit();
    uint16_t baud_div=0;
    UART1->SR = (1<<5);
    UART1->CR1 = (0<<4)|(0<<3)|(0<<2)|(0<<1)|(0<<0);
    /*1位起始位 8位数据位 结束位由CR3设置 不使用奇偶校验 不使能奇偶校验中断*/
    UART1->CR2 = (0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<3)|(1<<2);
    /*使能发送和接收 接收中断 禁止发送中断*/
    UART1->CR3 = 0; /*设置1位停止位 不使能SCLK*/        
    UART1->CR5 |= (1<<3);   // 选择单线半双工模式  
    /*使用智能卡模式需要设置的,基本上保持默认就行了 */
   
    /*设置波特率*/
    baud_div =HSIClockFreq/BaudRate;  /*求出分频因子*/
    UART1->BRR2 = baud_div & 0x0f;
    UART1->BRR2 |= ((baud_div & 0xf000) >> 8);
    UART1->BRR1 = ((baud_div & 0x0ff0) >> 4);    /*先给BRR2赋值 最后再设置BRR1*/
    UART1->CR1 |= (1<<5);         /*使能UART*/
}

然后在TXD 引脚加了个10K的上拉电阻.
就用6位的串口线图.
没加上10K上拉还能发的,现在加了,也不能发送了.其怪.

一周热门 更多>