stm32模擬串口(基於高精度延時)

上一篇實現了高精度延時,這一節我們利用已實現的高精度延時接口來模擬串口發生數據(接收數據暫時沒用到,所以偷懶沒實現),直接上代碼。


一、softserial.h



#ifndef _SOFTWARE_SERIAL_H
#define _SOFTWARE_SERIAL_H

#include "stm32f1xx.h"

void soft_serial_init(void);
void serial_write(uint8_t const data);
void serial_transimt(const uint8_t *p_txdata,uint16_t size);
void serial_transmit_str(const uint8_t *str);

#endif

二、softserial.c


#include "softserial.h"
#include "delay.h"
#include "gpio_api.h"
//#include "sf6.h"


#define SER_TX      PA_15

#define TX_H()      gpio_write(SER_TX,1)
#define TX_L()      gpio_write(SER_TX,0)

#define BAUD        9600

const uint16_t bit_dly = 1000000U/BAUD;     /* 1s = 1,000,000us */



void soft_serial_init(void)
{
    gpio_init(PA_15);
    gpio_format(PA_15,GPIO_MODE_OUTPUT_PP,GPIO_PULLUP);
    TX_H();
}


void serial_write(uint8_t const data)
{
    uint8_t i;
    
    TX_L();
    udelay(bit_dly);
    
    for(i=0;i<8;i++){
        if((data>>i & 0x01) == 0){
            TX_L();
            udelay(bit_dly);
        }else{
            TX_H();
            udelay(bit_dly);
        }
    }
    TX_H();
    udelay(bit_dly);
}

void serial_transimt(const uint8_t *p_txdata,uint16_t size)
{
    for(uint16_t i=0;i


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章