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

2019-12-22 13:44发布

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

    求教,stm8如何去使用串口单线半双工模式呢?
  因目前有一东东要用到一根线来收发数据,这里想到了,stm8的串口单线半双工,但怎么搞都是只能发不能收的。
  程序昨晚在家忘了拷过来了。
  还有串口一根线收发,那么电脑串口那端两根线的,如何去改成一根呢?
  有用过的大神们,指条明路走走。     
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
24条回答
cyxavr
1楼-- · 2019-12-23 08:04
本帖最后由 cyxavr 于 2012-12-21 13:07 编辑

谢谢你的指点。兄弟,你有STM8的串口单线传输例程吗?贴上来让我学习学习吧。
zhshliu
2楼-- · 2019-12-23 08:10
你可以参照STM8库里面有HalfDuplex例程
cyxavr
3楼-- · 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上拉还能发的,现在加了,也不能发送了.其怪.
summarize
4楼-- · 2019-12-23 15:37
cyxavr 发表于 2012-12-21 20:42
void uart_init(void)
{
     GPIOD->DDR |= GPIO_PIN_5;   //输出模式

TXD发送时设置为推挽输出,接收时设置为输入,不就行了?
pvliao_u
5楼-- · 2019-12-23 18:14
 精彩回答 2  元偷偷看……
cyxavr
6楼-- · 2019-12-23 18:52
有结果.是用一条IO去模拟的的.

一周热门 更多>