STM8S105K4T6------串口发送和接收
上篇文章讲了如何点亮板载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亮,否则灭

经过测试,都是没问题的,你也赶紧试试吧
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
