打印
[STM8]

众拳【STM8入门】第22讲 RS232串口通讯实验

[复制链接]
1659|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 刘洋讲单片机 于 2017-1-11 14:50 编辑

第22讲.RS232串口通讯实验.zip (564.18 KB)

众拳【剑齿虎STM8】开发板学习笔记分享  
              
   
点击此处查看全部资料
22讲   RS232串口通讯实验



22.1概述
剑齿虎开发板集成了RS232接口,也集成了USB驱动芯片CH340,它们都能实现串行通讯功能;并且都是与CPU的串口1直接通讯,这就约束他们不能同时连接到串口1上,所以他们通过一组6P跳线进行转接。通过这组跳线就能保证它们不能同时和串口1产生物理连接,保证了通讯的正常。
22.1  RS232原理图
从原理图中可以看出,35短接、46短接就可以进行232串口通讯;13短接、24短接就可以进行USB串口通讯。串口通讯在软件设计上是一致的,在开发板上集成了RS232芯片和CH340芯片,它们仅仅是在物理层面上变为232接口和USB接口,但通讯格式完全相同。
22.2实验目的   
通过RS232和CH340实现串口通讯功能。计算机侧通过“蓝精灵多功能监控软件”实现串口通讯监控。
22.3程序文件设计22.3.1  lib文件中内容分析
我们在“Lib”文件夹,把需要引用系统本身定义好的库函数添加在其中,我们使用到哪个外设功能,直接引用到此文件夹中即可。
22.1 “Lib”文件夹更改内容
本节实验及以后的实验我们都是用到库文件,其中 stm8s_conf.h头文件包含了所有外设的声明头文件,在本试验中我们使用到时钟外设和GPIO端口外设。所以#include "stm8s_clk.h"、#include "stm8s_uart1.h"和#include "stm8s_gpio.h"需要“打开”(就是把语句前面的双斜线注释符号删除即可,参考图17.1)。Stm8s_gpio.c库函数包含了所有管脚初始化功能和具体的执行操作;Stm8s_clk.c库函数主要包含了内部时钟和外部时钟设置,在主函数中规定了具体的执行方法,在这个函数中就有具体相关的执行步骤;Stm8s_uart1.c库函数主要包含了串口1相关寄存器设置和uart1库函数具体执行过程。
22.3.2  main.c文件中的程序
主程序就实现初始化和调用驱动程序,这样主程序控制思路清晰,流程简单。要想了解全面详实的程序,请大家参考光盘(网盘)中程序及程序注释。
/***********************************************************************
*   说    明: 串口通讯
*   开发平台: 剑齿虎STM8开发板        

*   关注微信公众平台微信号:"zxkj-ly",免费获取STM8资料。
*   STM8技术交流QQ群【335123291】
*   哈尔滨卓恩科技开发有限公司
*
*   作    者: 刘洋 张殿东
*   版    本: V1.0
*   日    期: 2016-05-03   
*
*   IAR开发环境    版本 V2.20.1
*   ST库函数       版本 V2.2.0
***********************************************************************/
#include "pbdata.h"//引入自定义公共头文件
void BSP_Configuration(void);//硬件初始化函数声明
/***********************************************************************
*   函 数 名: main
*   功能说明: c程序入口
*   形    参:无
*   返 回 值: 错误代码(无需处理)
***********************************************************************/
int main(void)
{
  BSP_Configuration();//硬件驱动初始化函数
  while(1)//主程序循环,反复执行循环体里的语句
  {
    LED_Demo2();//在主程序中调用LED_Demo2()函数
  }
}
/***********************************************************************
*   函 数 名: BSP_Configuration
*   功能说明: 初始化硬件设备。只需要调用一次。该函数配置CPU寄存器和外设的寄存器并初始化一些全局变量。
*   形    参:无
*   返 回 值: 无
***********************************************************************/
void BSP_Configuration(void)
{  
  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//时钟速度为内部16M,1分频,
  UART1_Congfiguration();//调用RS232串口1初始化函数
  LED_Init();//调用LED初始化函数
  rim();//打开总中断
}
/*断言函数:它的作用是在编程的过程中为程序提供参数检查*/
#ifdef USE_FULL_ASSERT
void assert_failed(u8* file,u32 line)
{
  while(1)
  {
  }
}
#endif
22.3.3  uart1.c文件中的程序
#include "pbdata.h"
/***************************************************************************
*   函 数 名: UART1_Congfiguration
*   功能说明: UART1 配置函数
*   形    参:无
*   返 回 值: 无
***************************************************************************/
void UART1_Congfiguration(void)
{
    //配置串口参数为:波特率115200,8位数据位,1位停止位,无校验,禁止同步传输,允许接收发送  UART1_Init((u32)115200,UART1_WORDLENGTH_8D,UART1_STOPBITS_1,UART1_PARITY_NO,UART1_SYNCMODE_CLOCK_DISABLE,UART1_MODE_TXRX_ENABLE);
    UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);//使能接收中断
    UART1_Cmd(ENABLE);//使能UART1
}
/***************************************************************************
*   函 数 名: UART1_Send_Byte
*   功能说明: UART1发送数据函数
*   形    参:u8 byte  一次发送一个字节
*   返 回 值: 无
***************************************************************************/
void UART1_Send_Byte(u8 byte)
{
    UART1_SendData8(byte);//UART1发送8位数据
    while(UART1_GetFlagStatus(UART1_FLAG_TXE)==RESET);//等待发送完成
}
22.3.4  uart1.h文件中的程序
/***********************************************************************
*    剑齿虎STM8开发板硬件连接
*    PA4/UART1_RXD         
*    PA5/UART1_TXD         
************************************************************************/
#ifndef _UART1_H //宏定义,定义文件名称
#define _UART1_H
/*--------------------------头文件引用------------------------------------*/
#include "stm8s.h"
/*--------------------------函数声明------------------------------------*/
void UART1_Congfiguration(void);//UART1 配置函数
void UART1_Send_Byte(u8 byte);//UART1发送数据函数
#endif//定义文件名称结束
22.3.5  stm8s_it.c文件中的程序
中断和中断处理子程序建立关系必须在stm8s_it.c文件中对应位置中建立。关于串口1的中断处理子程序要写在事先定义好的入口之内。“INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)”,所以中断处理子程序入口地址必须放在uart1中断处理中,请看下面程序语句。
INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)
{
   UART1_Send_Byte(UART1_ReceiveData8());
}
22.3.6  补充说明
RS232通讯是全双工的,通讯速度很快,我们可以把波特率设置为“115200”;通讯格式为8位数据位;1位停止位;禁止使用同步模式。
还要启动中断,因为串口接收到数据的时候,我们让它产生中断,我们在中断中编写中断处理程序。
22.3  串口1中断处理库函数格式

每一课都有视频教程
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

148

主题

499

帖子

66

粉丝