当前位置: 首页 > news >正文

个人建设图片分享网站网络营销的营销方式是什么

个人建设图片分享网站,网络营销的营销方式是什么,网站怎么做直通车,湘潭做网站优化USART收发字符串及串口中断前言字符串的收发发送一个字符串接收字符串需求利用串口实现printf中断中断是什么前言 上一篇中,介绍了串口收发相关的寄存器,通过代码实现了一个字节的收发,本文接着上面的内容,通过功能函数实现字符串…

USART收发字符串及串口中断

  • 前言
  • 字符串的收发
    • 发送一个字符串
    • 接收字符串
      • 需求
    • 利用串口实现printf
  • 中断
    • 中断是什么

前言

上一篇中,介绍了串口收发相关的寄存器,通过代码实现了一个字节的收发,本文接着上面的内容,通过功能函数实现字符串的收发,然后引入中断解决收发过程中while()死等的问题。

字符串的收发

发送一个字符串

根据昨天的字符发送函数,只需要稍作修改即可实现发送函数了,一个字符串的结尾会有一个’\0’作为结束符,所以再发送过程中,只需要判断当前发送的字符是不是结束符即可,如果不是结束符就将该位发送至电脑的串口调试助手,如果是结束符,那就意味着一个字符串发送完毕了。具体代码如下:

/*******************************************
*函数名    :Usart1_Send_Str
*函数功能  :串口1发送一个字符串函数
*函数参数  :u8 *str
*函数返回值:无
*函数描述  :
*********************************************/
void Usart1_Send_Str(u8 *str)
{while(*str != '\0'){Usart1_Send_Byte(*str);str++;}
}

接收字符串

发送字符串相对容易,接收这边,就需要借用C语言中的数组来帮忙了,因为数据是一个字符一个字符的发送过来的,每一次只能接收一个字符,所以需要使用一个数组来存接收到的位,而且串口助手在发送字符串的时候是不会给单片机发送结束符,所以还需要编程者自己规定结束符,当然,后面引入空闲中断之后就不需要这样操作了。这里笔者使用的是‘#’作为结束标志。具体实现代码如下:


/*******************************************
*函数名    :Usart1_Receive_Str
*函数功能  :串口1接收一个字节函数
*函数参数  :void
*函数返回值:u8 str
*函数描述  :
*********************************************/
void Usart1_Receive_Str(void)
{static u8 i=0;//等待接收完成while(!(USART1->SR & (1<<5)));//将数据寄存器的数据读取到数组Str_Buff[i] = USART1->DR;i++;if(Str_Buff[i-1]=='#')//如果检测到结束标志‘#’{Str_Buff[i-1]= '\0';//手动给字符串添加‘\0’结束符i=0;Usart1_Receive_Str_Flag=1;//接收完成的标志位置一Usart1_Send_Str(Str_Buff);//将接受的数组再发回串口助手}
}

需求

使用串口调试助手发送11打开1号小灯,10关闭一号小灯,21打开二号小灯,20关闭二号小灯。效果如下:
在这里插入图片描述
主函数代码:
在这里插入图片描述

利用串口实现printf

在C语言的学习中,使用频率最高的输出函数就是printf了,这个函数在单片机上也同样适用,只是要改一下输出的方向,所以也叫重定向。
在C中printf函数-----输出函数
输出方向:PC机------>屏幕
在单片机中printf-------输出函数
输出方向: 单片机---->PC机
关于具体的修改其实KEIL已经帮我们做好了,需要我们修改的只有一个,就是将“stdio.h”内的fputc,也就是字符输出函数,修改到和我们的字符串输出函数关联即可。具体代码如下:

 //printf的重定向函数
//fputc-----专门发送字符的函数h
int fputc(int c, FILE * stream)
{Usart1_Send_Byte(c);return c;
}

将此代码放到USART1.c中即可,不需要调用也不需要声明。
在这里插入图片描述
然后就是勾选KEIL的库,如下图所示,依次选择魔法棒、Target、然后将3所在位置的复选框锁定。
在这里插入图片描述
然后再在USART1.h中添加stdio.h。
在这里插入图片描述
最后在主函数中调用printf即可,printf主要是方便我们的后期调试,实用语法与C一致。
在这里插入图片描述
实际输出效果:
在这里插入图片描述
到这里,已经实现了字符串的收发,但是存在两个问题,
1是上位机发送数据到板子上必须要设置结束符,类似笔者此处的‘#’;
2是此代码在接收时会阻塞在等待接受完毕的while,这会导致其他的模块工作不正常,在while(1)内,一定要尽力避免死等的出现。
很明显,现在这个代码还不太令人满意,那么要怎么修改呢,在修改代码之前,需要先去了解一个新的东西——中断。
在这里插入图片描述

中断

首先,需要知道中断是个什么东西,它有什么作用,具体怎么使用,下面一一来进行介绍。

中断是什么

中断嘛,按照名字的第一反应是终止一件事,打断某些东西的感觉,实际上也差不多是这个意思,它终止和打断的就是前面我们编写的main函数里面的东西。
在这里插入图片描述
也就是说在程序正常运行过程中,出现了不正常的事件(异常),CPU会去处理这个异常,处理完之后再回到正常的程序中。这个异常事件就是中断。
中断的目的:由外设或者CPU创造一个异常事件(紧急事件)
紧急事件发生的时间和地点:未知
紧急事件是实时响应的,紧急事件不能执行太久(里面不能有延时 循环 阻塞程序)
下面我们来看一张图:
代码正常运行的时候是如下图所示的蓝色箭头方向,首先会依次向下执行初始化代码,然后进入while循环;
如果我们在初始化中,初始化了中断,就会有一个对应的中断服务函数,当中断的条件满足了,程序就会暂时终止main函数里面的内容,去八中断服务函数里面的内容执行完毕了再回来运行main里面的内容。
在这里插入图片描述
同时,从上图可以看出,当中断被初始化后,任何时刻都可能满足中断的条件,也就是在任何位置都可能会跳出main里面的内容去执行中断服务函数里面的内容。因此说它产生的时间和地点是未知的。

http://www.15wanjia.com/news/3321.html

相关文章:

  • 中信建设有限责任公司财务总监seo诊断方案
  • 昆山做网站的公司营销型企业网站诊断
  • 每年网站备案抽查站外seo是什么
  • 岳池网站制作肇庆网站建设制作
  • 个人备案网站 内容seo是谁
  • 中国做外贸网站有哪些问题免费搭建个人网站
  • 做体育赛事网站公司注册网站多少钱
  • 綦江建设银行网站快速网站推广优化
  • 重庆电商网站网页制作代码
  • 佛山市手机网站建设哪家好企业网站推广方案
  • 网站建设价格差别公司推广渠道
  • 网站域名备案谁来做优秀的网页设计案例
  • 网站怎么做文件上传百度分公司
  • 企业网站建设问题研究百度关键词搜索怎么收费
  • wordpress content slideaso优化是什么意思
  • 现在都有什么网站工作室今日新闻
  • 做网站的软件公司如何引流客源最快的方法
  • 网站txt地图怎么做市场调研报告500字
  • 学校如何建设网站网站排名快速提升
  • 查看网站服务器信息个人博客网页设计
  • 商业网站建设开发推广app赚佣金平台有哪些
  • python人网站开发案例互联网哪个行业前景好
  • sofish wordpress主题百度seo优化是什么
  • 一级a做受片免费网站semen
  • 企业网站建设费用搜索广告
  • 中国建设银行贵州省分行网站东莞seo建站哪家好
  • wordpress套模板培训北京seo
  • 微店网页版登录入口人员优化是什么意思
  • 电子商务网站的建设及规划网络推广主要内容
  • 聊城做网站的公司价格关键词网站排名查询