学到定时器部分时,想要将调试信息输出,故先把串口基本功能学了,才能方便后面的调试。
使用某宝上买的STM8S最小系统板,外部晶振为8MHz的。HSI的误差对串口波特率影响比较大,这里使用外部晶振。
开发板芯片是105K4的,只有UART2,这里把UART2的整体框图放在下面,蓝色矩形框是串口异步基本收发所用到的寄存器,可以看到,所要用到的寄存器很少。
这里先说下如何计算波特率以及误差多少:
官方手册已经给出:
这里我使用的波特率为9600bps,然后主时钟为8M,这样分频因子为8M/9600约等于833=0x341,计算的波特率为8M/833=9603.8,误差为(9603.8-9600)/9600*100%约等于0.04%。
如何配置串口呢,看官方手册说明:
发送与接收帧结构相同,波特率一样,唯一不同的是一个是发送,一个是接收,这里我们设置帧格式为,9位数据,偶校验(注意:9位数据中校验位占了最后一位),1位停止位。波特率为9600,由上面计算出来为0x341,所以 UART2_BRR2=0x01,UART2_BRR1=0x34;
下面发一行字符串到串口显示:
Send_String("Are you ok?");
串口打印输出
下面从串口调试器发送字符到STM8,stm8将字符加一返回,看下图:
串口代码部分:
/* 函数名:Uart2_Init
* 参数:无
* 功能:UART2串口波特率初始化
* 返回:无
*/
void Uart2_Init(void){//串口2初始化
UART2_CR1_M=1;//设置字长为9个数据位
UART2_CR3_STOP=0x00;//1个停止位
UART2_BRR2=0x01;//配置波特率为9600,误差0.04%
UART2_BRR1=0x34;
UART2_CR1_PS=0;//偶校验
UART2_CR1_PIEN=1;//奇偶校验控制使能
// UART2_CR2_TIEN=1;//发送中断使能
UART2_CR2_TEN=1;//发送使能
UART2_CR2_RIEN=1;//接收中断使能
UART2_CR2_REN=1;//接收使能
Send_String("串口2初始化完成rn");
}
/* 函数名:Send_String
* 参数:*string - 字符串首地址
* 功能:UART2输出字符串
* 返回:无
*/
void Send_String(char * string){//发送字符串
while(*string!='