我是靠谱客的博主 安详乌龟,最近开发中收集的这篇文章主要介绍STM8S903K3T6C基于IAR寄存器开发串口通讯示例,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

STM8S903K3T6C基于IAR寄存器开发串口通讯示例


  • 关于STM8S单片机串口波特率计算公式:
    在这里插入图片描述

⛳在采用内部时钟16MHz的情况下:

  • ????假设波特率设置为9600,;UART_DIV = 16 000 000 /9600等于1666,换算成16进制数为0x682,
     UART1_BRR2 = 0x02;
    UART1_BRR1 = 0x68;
  • ????假设波特率设置为15200,;UART_DIV = 16 000 000 /115200等于139,换算成16进制数为0x08b,
  /* 波特率:115200 */   
    UART1_BRR2 = 0x0b;
    UART1_BRR1 = 0x08;

⚡注意事项

  • 按下列顺序编写波特率寄存器选择要求的波特率:
    a. UART_BRR2
    b. UART_BRR1

????先给UART_BRR2寄存器赋值,然后给UART_BRR1赋值。

????示例代码

/*---------------------STM8S903K3T6C-------------------------*/
#include"iostm8s903k3.h"
#include"stdio.h"//printf打印
void CLK_Init(void)
{
//  CLK_ECKR = 0x01; //开启外部时钟寄存器
//  CLK_SWR = 0xb4; //HSE外部时钟源作为主时钟源
//  CLK_CKDIVR = 0x00;//不分频
  
  CLK_ICKR |= 0X01; //使能内部高速时钟 HSI
  CLK_CKDIVR = 0x00; // 不分频,16M
 //    CLK_CKDIVR = 0x08; // 16M内部RC经2分频后系统时钟为8M 
   while(!(CLK_ICKR&0x02)); //HSI准备就绪
     CLK_SWR = 0xE1;//HSI内部时钟源作为主时钟源(复位值) 
}
void UART1_Init(void)//波特率115200
{
    UART1_CR3 = 0x00;
    UART1_CR2  = 0x00;
    UART1_CR3  = 0x00; 
  /* 波特率:9600 */  
     UART1_BRR2 = 0x02;//
    UART1_BRR1 = 0x68;//
  /* 波特率:115200 */   
//    UART1_BRR2 = 0x0b;
//    UART1_BRR1 = 0x08;	

}
int putchar(int c)
{
  while(!(UART1_SR&0x40));
  UART1_DR = c;
  while(!(UART1_SR&0x40));
    return (c);
}
void main()
{	
	unsigned char c;
	CLK_Init();
	UART1_Init();
	UART1_CR2  = 0x0c;
	while(1)
	{
	printf("nr请输入一个按键");
	while(!(UART1_SR&0x20));
	c = UART1_DR;
	printf("nr输入按键为%c。",c);
	}

}

  • ????串口输入和打印信息
    在这里插入图片描述

最后

以上就是安详乌龟为你收集整理的STM8S903K3T6C基于IAR寄存器开发串口通讯示例的全部内容,希望文章能够帮你解决STM8S903K3T6C基于IAR寄存器开发串口通讯示例所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部