STM8S_库函数_USART串口接收发送配置

大家好,我是单片机爱好者-MCU起航。这一节我们介绍如何使用库函数方式控制STM8S103F3P6片上的USART接口,也叫串口。首先,我们看一下原理图,找到USART接口的位置:

如图所示,单片机上的PD5和PD6为串口收发使用的管脚。学过51的童鞋,基本看到这里就明白了,设置一下波特率、中断、收发函数,直接就可以用了。

咱们首先看一个例程,使用串口接收数据,把收到的数据自动加一,然后再发出去,代码如下:

/* Includes ------------------------------------------------------------------*/
#include "stm8s.h"
#include "uart.h"
/* Private defines -----------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
void Delay(uint16_t nCount)
{
  /* Decrement nCount value */
  while (nCount != 0)
  {   
    nCount--;
  }
}
void main(void)
{
  Uart1_Init();
  enableInterrupts();                 //使能中断
  while (1);
  
}

如上所示,主函数里仅进行了三个操作:

1、串口初始化;

2、开启全局中断;

3、原地等待。

咱们看下串口初始化部分的代码:

#include "uart.h"

void Uart1_Init(void)
{
    UART1_DeInit();		/* 将寄存器的值复位 */

	/*
	 * 将UART1配置为:
	 * 波特率 = 9600
	 * 数据位 = 8
	 * 1位停止位
	 * 无校验位
	 * 使能接收和发送
	 * 使能接收中断
	 */

    UART1_Init((u32)9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO , UART1_SYNCMODE_CLOCK_DISABLE , UART1_MODE_TXRX_ENABLE);
    UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);
    UART1_Cmd(ENABLE);
}

void UART1_SendByte(u8 data)
{
	UART1_SendData8((unsigned char)data);

	/* 等待传输结束 */
	while (UART1_GetFlagStatus(UART1_FLAG_TXE) == RESET);
}

这里有两个函数,第一个进行串口初始化,主要有几个功能:

1、波特率设置为9600,数据长度8,1个停止位,没有奇偶较验,异步时钟禁止,收发使能。

2、开启接收中断。

3、串口使能。

第二个函数更简单了,发送一个字节,用法跟51基本是一样的。

然后看中断部分:

 INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)
 {
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
    unsigned char ch;
    ch=UART1_ReceiveData8() + 1;
    UART1_SendData8(ch);
 }

收到数据,加一,发出,简单,好用。

当前程序仅能发送一个字节,除此之外,我们还提供了可发送字符串的例程。

编译、下载、上电,功能正常!

打完收工!

想要获取相关程序完整的工程文件,可以关注公众号:单片机爱好者,然后回复关键词:STM8S。可以获取完整的下载链接,里面包含工程文件、视频、PPT、数据手册等所有相关资料。

《STM8S_库函数_USART串口接收发送配置》有10条评论

      • 谢谢博主回复,我查了一下其他程序,发现STM8S标准库的例程中也是没有初始化的。我也想了一下,想通了为什么不需要设置GPIO,贴个自己在另一个论坛写的帖子关于UART配置过程中复用功能RX TX对应引脚无需配置的帖子:http://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=626014&page=1&extra=#pid2514937
        不知这样的想法是否正确

        回复

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据