1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
学到定时器部分时,想要将调试信息输出,故先把串口基本功能学了,才能方便后面的调试。 使用某宝上买的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!=' |