zl程序教程

您现在的位置是:首页 >  其它

当前栏目

STM8S105K4T6------串口发送和接收

发送 串口 接收 ------
2023-09-11 14:19:59 时间

上篇文章讲了如何点亮板载LED,这次来讲,stm8s105k4t6的串口发送数据

不会点亮LED灯可以看—>stm8点亮LED

串口发送部分

步骤: 在点亮LED灯基础上增加一个uart.c和uart.h文件 代码看我下面的图,我后面讲解代码

在这里插入图片描述

记得要#include“uart.h”头文件和初始化串口配置函数

在这里插入图片描述

main.c就几行代码,照抄我都就行了 ,下面放uart.c和uart.h的代码

在这里插入图片描述

这里是是对串口引脚的初始化

在这里插入图片描述

UART.C代码

#include "usart.h"

void Usart2_Config(void)
{
	 //发送接收引角口初始化
	GPIO_Init(GPIOD, GPIO_PIN_6, GPIO_MODE_IN_PU_NO_IT);
	GPIO_Init(GPIOD, GPIO_PIN_5, GPIO_MODE_OUT_PP_HIGH_FAST);
	
	CLK_PeripheralClockConfig(CLK_PERIPHERAL_UART2, ENABLE);

	UART2_Init((uint32_t)115200, UART2_WORDLENGTH_8D, UART2_STOPBITS_1,UART2_PARITY_NO,UART2_SYNCMODE_CLOCK_DISABLE, UART2_MODE_TXRX_ENABLE);

	UART2_ITConfig(UART2_IT_RXNE_OR, ENABLE);//开启接收中断
	UART2_Cmd(ENABLE);                           
}

void Usart2_SendByte(u8 Byte)
{


	UART2_SendData8(Byte);

	while((UART2->SR & 0x80) == 0x00)
	{

	}
}

void Usart2_SendHalfWord(uint16_t ch)
{
	uint8_t temp_h, temp_l;
	
	/* 取出高八位 */
	temp_h = (ch&0XFF00)>>8;
	/* 取出低八位 */
	temp_l = ch&0XFF;
	
	/* 发送高八位 */
	Usart2_SendByte(temp_h);		/* 发送低八位 */
	Usart2_SendByte(temp_l);	
}

void Usart2_SendByteArr(u8* Buff, u16 Size)
{
	while(Size--)
	{
		Usart2_SendByte(*Buff++);
	}
}

void Usart2_SendHalfWordArr(u16* Buff, u16 Size)
{
	while(Size--)
	{
		Usart2_SendHalfWord(*Buff++);
	}
}

void Usart2_SendString(char *str)
{
	unsigned int k=0;

	Delay_us(100);
  do 
  {
    Usart2_SendByte(*(str + k));
    k++;
  }while(*(str + k)!='\0');
	Delay_us(100);
}

这几个函数,就是封装发送字节,数组,字符串的函数,这样封装后,代码直接调用函数就能够实现发送的功能

UART.H代码

#ifndef __USART_H
#define __USART_H

#include "stm8s_conf.h"
#define UART2_FRAME_LENGHT   30
//中断缓存串口数据长度

extern u8 Uart2_Buff[UART2_FRAME_LENGHT], Uart2_RecNum;

void Usart2_Config(void);
void Usart2_SendHalfWord(uint16_t ch);
void Usart2_SendByte(u8 Byte);
void Usart2_SendByteArr(u8* Buff, u16 Size);
void Usart2_SendHalfWordArr(u16* Buff, u16 Size);
void Usart2_SendString(char *str);
#endif

在这里插入图片描述

最后串口就能实现发送数据啦,我这是因为杜邦线接触不良, 有信号干扰才这样

串口接收部分

因为这里要实现的功能是:串口接收到什么,我们就发什么出去
只需要在main.c里面加上开启总中断的代码就行了
在这里插入图片描述

在中断代码里面这样写就行了
在这里插入图片描述
这样就能实现发1,LED亮,否则灭
在这里插入图片描述
经过测试,都是没问题的,你也赶紧试试吧