本帖最后由 刘洋讲单片机 于 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原理图 从原理图中可以看出,3—5短接、4—6短接就可以进行232串口通讯;1—3短接、2—4短接就可以进行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中断处理库函数格式
每一课都有视频教程 |