上一篇实现了高精度延时,这一节我们利用已实现的高精度延时接口来模拟串口发生数据(接收数据暂时没用到,所以偷懒没实现),直接上代码。
一、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