在上一篇文章中我们介绍了IO口模拟串口数据的发送,这一篇文章我们介绍IO口模拟串口数据的发送。同样的,我们没有使用库函数和中断,我们使用简单的定时来完成数据的接收。
1、IO口模拟串口接收数据的原理
同样的,我们将要接收的数据认为是10位(实际上,我们在接收数据之前必须搞清楚我们将要接收的是什么,否则我们需要在模拟串口程序中添加其他代码来进行检测)。
同样的,我们事先知道发送数据的波特率为:9600。
我选择的是STM8S003F的PD3引脚作为模拟串口的接收引脚。
思路是这样的,我们使用定时器定时,通过判断是否是起始位(通过低电平判断,因为没有发送数据应该是高电平),得到起始位了以后,延时一个数据位发送的时间(我们将定时器的时间设置为一个数据位的发送时间),然后逐次判断数据位的电位,8次延时以后,在通过最后一次延时,以此来接收完了一个字节。
用这种方法的优点是逻辑简单,能够清晰的认识到串口发送数据的过程,但是,由于我们检验数据是否正确用到的是我们上一篇文章中用到的发送数据的方法,因此在发送字符串的时候我们发现它将只能接收到奇数的字节,只能在接收单字节数据的时候能正常工作,也就是大部分情况无法使用。如果需要它是一个正常代码中能用的全双工模拟串口,需要使用到中断,我【待修改】将在后面进行介绍。
注意:这篇文章实现的IO口模拟串口接收数据,只能实现单个字节的接收!
2、实现过程
2.1、一切从main()函数开始
同样的,我们建立完工程后需要从main()函数开始,我们首先需要进行初始化的配置All_Config()【在UserApp.c中】,代码如下:
//head file
#include "UserApp.h"
#include "IO.h"
#include "User.h"
#include "Time.h"
#include "Delay.h"
//初始化函数
void All_Config( void )
{
Clock_Config();
IO_Init();
TIM2_Init();
}
其中Clock_Config()【在UserApp.c中】为单片机时钟配置函数,代码如下:
//初始化时钟 选择内部16M晶振
void Clock_Config()
{
CLK->CKDIVR &= ~( BIT(4) | BIT(3) );
}
其中我们选择的内部16M晶振,单片机默认的也是16M晶振但是会有8分频,我们这里设置的是没有分频。
其中IO_Init()【在IO.c中】是对IO口的初始化,由于我们需要验证接收的正确性,我们需要将接收到的数据发送到电脑串口程序,我们可以使用单片机自己的串口发送口,由于我能保证我自己上一篇文章的正确性,因此我直接在上一篇文章的基础上进行开发。也就是我需要初始化PD2和PD3,代码如下:
//head file
#include "IO.h"
#include "User.h"
void IO_Init()
{
//TXD:TXD位推挽输出 PD2
UART_PORT->ODR |= UART_PIN_TX; //0000 0100
UART_PORT->DDR |= UART_PIN_TX; //0000 0100
UART_PORT->CR1 |= UART_PIN_TX; //0000 0100
UART_PORT->CR2 &= ~UART_PIN_TX; //0000 0100
//RXD:悬浮输入 高电平 PD3
UART_PORT->IDR |= UART_PIN_RX; //0000 1000
UART_PORT->DDR &= ~UART_PIN_RX; //0000 1000
UART_PORT->CR1 &= ~UART_PIN_RX; //0000 1000
UART_PORT->CR2 &= ~UART_PIN_RX; //0000 1000
}
其中TIM2_Init()【在Time.c中】是定时器的初始化,
上一篇:【嵌入式开发】STM8S103F3P6单线半双工串口通信
下一篇:stm8s103串口
推荐阅读最新更新时间:2024-11-16 21:24
设计资源 培训 开发板 精华推荐
- 使用 IXYS 的 MX879 的参考设计
- 【涂鸦智能】基于涂鸦智能的查寝神器
- LT1172CT、5V/1.25A 反激式转换器的典型应用
- AM2G-0524DH30Z ±24V 2 瓦 DC/DC 转换器的典型应用
- LTM4628EV DC/DC 模块稳压器的典型应用电路,适用于 4 相、1.2V 和 32A
- DC1304A-B,演示板双路可编程 2.5MHz 滤波器/ADC 驱动器
- jlink adapter for proxmark3
- SY89546U EV,用于 GB 以太网交换机的时钟多路复用器的评估板
- 基于STM32G474的电源主控板设计
- 使用 ON Semiconductor 的 KA7824AE 的参考设计