滦南| 开平| 镇坪| 宿松| 东海| 礼县| 察哈尔右翼中旗| 依安| 东明| 屯留| 三河| 旅顺口| 长寿| 盐边| 舟曲| 巢湖| 革吉| 获嘉| 商都| 岳西| 聂拉木| 北戴河| 榕江| 延庆| 新密| 博鳌| 五台| 修文| 安龙| 化隆| 陵水| 勃利| 汉中| 新余| 武宣| 内江| 唐山| 文登| 歙县| 阜新市| 铅山| 安庆| 平鲁| 香格里拉| 马鞍山| 林芝镇| 湘东| 五营| 惠民| 庆安| 安庆| 鹿泉| 岱山| 湖南| 鹰手营子矿区| 西昌| 漳浦| 安塞| 兴隆| 武陵源| 华池| 盐源| 康定| 万宁| 大龙山镇| 如东| 铁岭市| 霍邱| 北安| 革吉| 西固| 乐平| 唐山| 浦口| 冠县| 鲁山| 临沭| 木里| 桐城| 托克逊| 波密| 泰顺| 房山| 井陉矿| 寒亭| 怀集| 墨脱| 建瓯| 丹徒| 咸丰| 迁西| 东川| 台山| 环县| 吉安县| 北川| 衡阳县| 宜阳| 忻州| 辰溪| 元氏| 龙口| 荔浦| 柘荣| 尼木| 武安| 八一镇| 焉耆| 措美| 祁县| 乌海| 下陆| 汪清| 信丰| 高阳| 青白江| 科尔沁右翼中旗| 赤水| 靖安| 吴江| 台山| 平潭| 谢通门| 行唐| 安龙| 金堂| 亳州| 城阳| 山阳| 泗阳| 堆龙德庆| 台湾| 深州| 科尔沁左翼中旗| 蓬莱| 福安| 莎车| 昔阳| 巴里坤| 泉港| 泽普| 惠水| 稻城| 永善| 上高| 唐海| 额济纳旗| 景宁| 余江| 大庆| 永州| 湘东| 始兴| 南阳| 宾阳| 三都| 拜城| 缙云| 平谷| 威远| 绍兴县| 涪陵| 肥东| 钟祥| 普兰| 萍乡| 阜阳| 兴义| 光山| 射洪| 台前| 攸县| 萧县| 疏勒| 梅州| 乐亭| 金昌| 保山| 民乐| 苍山| 黄山市| 永福| 漳平| 平谷| 威海| 清水河| 辛集| 武定| 聊城| 英吉沙| 松原| 红岗| 平阳| 饶河| 戚墅堰| 上蔡| 莲花| 蒙阴| 呈贡| 屏南| 盐城| 黑龙江| 响水| 康平| 垦利| 呼和浩特| 威海| 巨野| 波密| 南安| 通化县| 永城| 奉化| 蚌埠| 鄂州| 周至| 罗甸| 东营| 黟县| 平顺| 安徽| 隆化| 井陉矿| 东海| 吉林| 桦川| 根河| 镇江| 阳城| 师宗| 金州| 长武| 阿瓦提| 新澳门银座客户端 澳门葡京国际 博九在线注册 新葡京赌场一码 澳门网 全新体验wnsr8999 澳门网上赌城娱乐 北京赛车系统 爱拼彩票 js6899阳光在线 威尼斯v29官方网站 彩天堂登录 威尼斯赌网 即时比分网球探 澳门威尼斯国际娱乐 威尼斯注册 永利官方投注 威尼斯赌场送彩金 世界杯赌球网站 澳门新濠天地娱乐 糖果派对电子游戏 威尼斯线上投注 斗牛游戏中心 澳门威尼斯人娱乐网 立即博备用网址 银河登陆 澳门巴黎人线上娱乐 大通永利官网 澳门威尼斯赌城地址 云顶赌博 新澳门葡京网址 线上威尼斯开户 bet36体育投注 澳门威尼斯注册送38 澳门百家乐网址 新濠天地 网址ag2781c0m 威尼斯赌场网站

澳门威尼斯人出租赌场:

2018-12-16 16:48 来源:挂号网

  澳门威尼斯人出租赌场:

  澳门皇冠网龙翔华夏迎新岁;气搏云天奋犬年。注重火不可太大,以免炒糊。

需要注意的是,购票请认准官方渠道:互联网(12306官网和APP)、电话(9510505)、窗口、自动售票机及火车票代售点,切勿相信第三方软件,以免上当受骗。为了解决这个矛盾,古人采用设置闰月的方法。

  2月15日(除夕)、2月19-21日,用人单位可选择,给予补休或另支付双倍日工资。后随佛教盛行,佛祖成道日与腊日融合,在佛教领域被称为“法宝节”。

  27-30日,西南地区东南部、江汉、江南中西部、华南中西部等地将有一次中到大雨、局地过程。西湖,她拥有三面云山,一水抱城的山光水色,她以“欲把西湖比西子,浓妆淡抹总相宜”的自然风光情系天下众生。

而英人百科全书里面则是记载着:“愚人节”乃是公元十五世纪宗教革命之后始出现的一个说谎节日。

  它还是英国国葬陵墓,除王室成员外,很多名人包括牛顿、丘吉尔等也葬于此。

  其中,、等局地雨势较大。初春三月,各地春花绽放,吸引人们踏青赏景,乐享美好春光。

  3月9日,游客在县篁岭村油菜花梯田自拍。

  据日本livedoor新闻网2月4日报道,视频中首先列举的是“日本便利店的便当很好吃,一定要尝一尝”,上传者对此否定称,“日本便利店的便当确实很好吃,但却不是最好的”。作者:指点江山;图片来自网络;欢迎参与文尾神侃话题在国人印象中,印度一直被冠有“开挂民族”这一称号。

  “任何情况下,不能凭短信进站和乘车。

  澳门威尼斯注册送300松川之樱的知名度不低,而坐船赏樱则是这里的一大特色。

  美国《防务新闻》网等媒体最近直接指出,美国向乌克兰提供武器是一种错误。随着气温升高,又迎来了春暖花开的最美时节。

  宝马会官网 美高梅网站多少 澳门网上电子游戏

  澳门威尼斯人出租赌场:

 
责编:
顶部横幅

我爱电子技术网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 20|回复: 1
打印 上一主题 下一主题

[STM8/32] 串口的基本知识你掌握了吗

[复制链接]
创世娱乐登录 2月11日(星期日)上班,2月24日(星期六)上班。

实习生

Rank: 1

帖子
1
积分
9 分
金币
1 个
跳转到指定楼层
楼主
发表于 3 天前 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
支付宝天天领红包
在做项目的时候是不是发现串口是最常用的通信接口,所以我自己整理了一下关于串口的一些常识性知识,方便自己学习。
          关键词:Loto虚拟示波器,串口时序,电平标准,模拟串口
    我们常说的串口按电平分类的话有两种,一种是TTL电平的串口,一种是232电平的串口。
首先我们先看一下这两种电平的区别。
TTL电平标准:输出L:  <0.8V;  H: >2.4V,输入L:  <1.2V:   H: >2.0V
TTL器件输出低电平要小于0.8V,高电平要大于2.4V,输入,低于1.2V就认为是0,高于2.0就认为是1.于是TTL电平的输入低电平的噪声容限就只有(O.8-0)/2=0.4V,高电平的噪声容限为(5-2.4)/2=1.3V.
RS232标准:
逻辑1的电平为-3~-15V,辑0的电平为+3~+15V,注意电平的定义反相了一次。

   然而TTL电平的串口还可以分为两种UART与USART。我们打开stm32cubeMX看到stm32F103有2个UART3个USART。在日常我们就可以说,它有5个串口,因为USART可以配置成UART

    UART与USART都是单片机上的串口通信,他们之间的区别如下:
首先从名字上看:
UART:universal asynchronous receiver and transmitter通用异步收/发器
USART:universal synchronous asynchronous receiver and transmitter通用同步/异步收/发器
  从名字上可以看出,USART在UART基础上增加了同步功能,即USART是UART的增强型,事实也确实是这样。但是具体增强到了什么地方呢?
  其实当我们使用USART在异步通信的时候,它与UART没有什么区别,但是用在同步通信的时候,区别就很明显了:大家都知道同步通信需要时钟来触发数据传输,也就是说USART相对UART的区别之一就是能提供主动时钟。如STM32的USART可以提供时钟支持ISO7816的智能卡接口。


     在实际的项目中用的最多的还是UART ,配置为:N, 8 ,1.波特率常用的有2400,9600,57600,115200.我们用串口来干什么呢?用过一些模块的工程师会知道,很多模块都是通过串口来控制或者通过串口透传数据的,比如gsm(2g,4g),gps,wifi,蓝牙等等,这些模块都是通过串口来控制。所以作为一个工程师,必须要搞懂串口。下面我们通过Loto虚拟示波器采集不同波特率的UART 波形:

对比理论的时序图,我们找找起始位和停止位,这个数据是多少?
有时候我们面试会考一个题目,那就是UART波特率9600的时候,它的一个bit是多长时间,这个怎么算?初学者肯定蒙了,我用串口直接就配置然后发数据就行了,从来没算过,下面我总结一下:

波特率2400:1/2400416.67*10^(-6)s=416.67us
波特率4800:1/4800208.33*10^(-6)s=208.33us
波特率9600:1/9600104.17*10^(-6)s=104.17us
波特率19200:1/1920052.08*10^(-6)s=52.08us
波特率57600:1/5760017.36*10^(-6)s=17.36us
波特率115200:1/1152008.68*10^(-6)s=8.68us

对比我们用Loto虚拟示波器采集的数据看看是不是一致呢?


我们算这个数据有什么用呢?是的!没错!就是模拟串口!当单片机串口不够用的时候项目中会用到。接下来我会分析几个论友写的代码,逐步深入理解TTL串口。

下面这个模拟串口的代码:
首先说它的发送吧,发送一个字节,先发送起始位OI_TXD = 0;  然后delay_us(BuadRate_9600);然后依次从低位开始检测Data的每一位,从而拉高拉低OI_TXD,然后延时,移位,重复8次,最后发送停止位发送完一个Data
接收的话:它是stm32开了个定时器4和一个外部中断.外部中断采到下降沿,然后定时器设置为107us中断一次,去采集一个bit,为什么是107us呢?因为此时波特率是9600,一个bit是104.17us,然后可以依次采集每个bit,直到采完一个data。(个人感觉107us不稳定)

  • /**
  • *软件串口的实现(IO模拟串口)
  • * 波特率:9600    1-8-N
  • * TXD : PC13
  • * RXD : PB14
  • * 使用外部中断对RXD的下降沿进行触发,使用定时器4按照9600波特率进行定时数据接收。
  • * Demo功能: 接收11个数据,然后把接收到的数据发送出去
  • */
  • #define OI_TXD        PCout(13)
  • #define OI_RXD        PBin(14)
  • #define BuadRate_9600        100
  • u8 len = 0;        //接收计数
  • u8 USART_buf[11];  //接收缓冲区
  • enum{
  •         COM_START_BIT,
  •         COM_D0_BIT,
  •         COM_D1_BIT,
  •         COM_D2_BIT,
  •         COM_D3_BIT,
  •         COM_D4_BIT,
  •         COM_D5_BIT,
  •         COM_D6_BIT,
  •         COM_D7_BIT,
  •         COM_STOP_BIT,
  • };
  • u8 recvStat = COM_STOP_BIT;
  • u8 recvData = 0;
  • void IO_TXD(u8 Data)
  • {
  •         u8 i = 0;
  •         OI_TXD = 0;
  •         delay_us(BuadRate_9600);
  •         for(i = 0; i < 8; i++)
  •         {
  •                 if(Data&0x01)
  •                         OI_TXD = 1;
  •                 else
  •                         OI_TXD = 0;
  •                 delay_us(BuadRate_9600);
  •                 Data = Data>>1;
  •         }
  •         OI_TXD = 1;
  •         delay_us(BuadRate_9600);
  • }
  • void USART_Send(u8 *buf, u8 len)
  • {
  •         u8 t;
  •         for(t = 0; t < len; t++)
  •         {
  •                 IO_TXD(buf[t]);
  •         }
  • }
  • void IOConfig(void)
  • {
  •         GPIO_InitTypeDef  GPIO_InitStructure;
  •         NVIC_InitTypeDef NVIC_InitStructure;
  •          EXTI_InitTypeDef EXTI_InitStruct;
  •         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);         //使能PB,PC端口时钟
  •          //SoftWare Serial TXD
  •         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
  •         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽输出
  •         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度为50MHz
  •         GPIO_Init(GPIOC, &GPIO_InitStructure);
  •         GPIO_SetBits(GPIOC,GPIO_Pin_13);
  •         //SoftWare Serial RXD
  •         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
  •         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  •         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  •         GPIO_Init(GPIOB, &GPIO_InitStructure);
  •         GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource14);
  •         EXTI_InitStruct.EXTI_Line = EXTI_Line14;
  •         EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;
  •         EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling; //下降沿触发中断
  •         EXTI_InitStruct.EXTI_LineCmd=ENABLE;
  •         EXTI_Init(&EXTI_InitStruct);
  •         NVIC_InitStructure.NVIC_IRQChannel= EXTI15_10_IRQn ;
  •         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
  •         NVIC_InitStructure.NVIC_IRQChannelSubPriority =2;
  •         NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
  •         NVIC_Init(&NVIC_InitStructure);
  • }
  • void TIM4_Int_Init(u16 arr,u16 psc)
  • {
  •         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  •         NVIC_InitTypeDef NVIC_InitStructure;
  •         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //时钟使能
  •         //定时器TIM4初始化
  •         TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
  •         TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
  •         TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
  •         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
  •         TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位
  •         TIM_ClearITPendingBit(TIM4, TIM_FLAG_Update);
  •         TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断
  •         //中断优先级NVIC设置
  •         NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;  //TIM4中断
  •         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  //先占优先级1级
  •         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;  //从优先级1级
  •         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
  •         NVIC_Init(&NVIC_InitStructure);  //初始化NVIC寄存器
  • }
  • int main(void)
  • {
  •          NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
  •          delay_init();
  •          IOConfig();
  •          TIM4_Int_Init(107, 71);         //1M计数频率
  •         while(1)
  •         {
  •                 if(len > 10)
  •                 {
  •                         len = 0;
  •                         USART_Send(USART_buf,11);
  •                 }
  •         }
  • }
  • void EXTI15_10_IRQHandler(void)
  • {
  •         if(EXTI_GetFlagStatus(EXTI_Line14) != RESET)
  •         {
  •                 if(OI_RXD == 0)
  •                 {
  •                         if(recvStat == COM_STOP_BIT)
  •                         {
  •                                 recvStat = COM_START_BIT;
  •                                 TIM_Cmd(TIM4, ENABLE);
  •                         }
  •                 }
  •                 EXTI_ClearITPendingBit(EXTI_Line14);
  •         }
  • }
  • void TIM4_IRQHandler(void)
  • {
  •         if(TIM_GetFlagStatus(TIM4, TIM_FLAG_Update) != RESET)
  •         {
  •                 TIM_ClearITPendingBit(TIM4, TIM_FLAG_Update);
  •                  recvStat++;
  •                 if(recvStat == COM_STOP_BIT)
  •                 {
  •                         TIM_Cmd(TIM4, DISABLE);
  •                         USART_buf[len++] = recvData;
  •                         return;
  •                 }
  •                 if(OI_RXD)
  •                 {
  •                         recvData |= (1 << (recvStat - 1));
  •                 }else{
  •                         recvData &= ~(1 << (recvStat - 1));
  •                 }
  •   }
  • }


[color=rgb(51, 102, 153) !important]复制代码

这里还有一个例子:
  • #include "stm32f10x.h"
  • #include "sys.h"
  • #include "exti.h"
  • #include "stdio.h"
  • //加入以下代码,支持printf函数,而不需要选择use MicroLIB
  • #if 1
  • #pragma import(__use_no_semihosting)
  • //标准库需要的支持函数
  • struct __FILE
  • {
  •         int handle;
  • };
  • FILE __stdout;
  • //定义_sys_exit()以避免使用半主机模式
  • _sys_exit(int x)
  • {
  •         x = x;
  • }
  • //重定义fputc函数
  • int fputc(int ch, FILE *f)
  • {
  •     void SendOneByte(u8 Byte);
  •         SendOneByte((uint8_t) ch);
  •         return ch;
  • }
  • #endif
  • void SendOneByte(u8 Byte)
  • {
  •         u8 i=8,tmp;
  •         TXD_low(); //发送起始位
  •         delay_us(104);
  •         //发送8位数据
  •         for(i=0;i<8;i++)
  •         {
  •                 tmp        = (Byte >> i) & 0x01;  //低位在前
  •                 if(tmp == 0)
  •                 {
  •                         TXD_low();
  •                         delay_us(104);        //0
  •                 }
  •                 else
  •                 {
  •                         TXD_high();
  •                         delay_us(104);        //1
  •                 }
  •         }
  • //        while(i--)
  • //        {
  • //          MNUSART_TXD = (Byte&0x01);     //先传低位
  • //          delay_us(104);
  • //          Byte = Byte>>1;
  • //          //无校验位
  • //          MNUSART_TXD=1;//发送结束位
  • //          delay_us(104);
  • //        }
  •          TXD_high();
  •          delay_us(104);
  • }
  • void SendBytes(u8 *str,u8 len)        //发送数组最好用这个,也可发送字符串
  • {
  •   u16 i;
  •   for(i=0;i<len;i++)
  •   {
  •            SendOneByte(str);
  •   }
  • }
  • void SendStr(u8 *str) //发送字符串,发送数组如果带0x00就中断发送了
  • {
  • while(*str)
  • SendOneByte(*str++);
  • }
  • int main(void)
  • {
  •   u8 len;
  •   u8 hello[]={0x5a,0xa5,0x00,0x00,0x01};
  •   delay_init();
  •   EXTIX_Init();
  •   //测试 发送一个字节
  •   SendOneByte(0x00);
  •   SendOneByte(0x01);
  •   SendOneByte(0x02);
  • //测试发送数组
  • SendBytes(hello,5);
  • //测试发送字符串
  • // SendBytes("hello word",11);
  • // SendStr("德玛西亚");
  •   while(1)
  •         {
  •       if(USART_RX_STA&0x8000)
  •           {
  •              printf("\r\n您发送的消息为:\r\n\r\n");
  •                    len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
  •                  SendBytes(USART_RX_BUF,len);
  •                  //也可以用下面的发送
  • //                 SendStr(USART_RX_BUF);
  • //                 for(len=0;len<200;len++)
  • //                 USART_RX_BUF[len]=0;
  •                    printf("\r\n\r\n");//插入换行
  •                 USART_RX_STA=0;
  •           }
  •         }
  • }


[color=rgb(51, 102, 153) !important]复制代码

  • #include "exti.h"
  • #include "stm32f10x_gpio.h"
  • #include "stm32f10x_exti.h"
  • #include "sys.h"
  • u8 tmp;
  • u8 USART_RX_BUF[USART_REC_LEN];
  • u16 USART_RX_STA=0;
  • //extern SendOneByte(u8 Byte);
  • void EXTIX_Init(void)
  • {
  •                 GPIO_InitTypeDef GPIO_InitStructure;
  •                 EXTI_InitTypeDef EXTI_InitStructure;
  •                 NVIC_InitTypeDef NVIC_InitStructure;
  •                 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);
  •                 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;                                 //PA.9 端口配置
  •                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽输出
  •                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度为50MHz
  •                 GPIO_Init(GPIOA, &GPIO_InitStructure);                                         //根据设定参数初始化GPIOB.5
  •                 GPIO_SetBits(GPIOA,GPIO_Pin_9);
  •                 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  •                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                          //浮空输入
  •                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  •                 GPIO_Init(GPIOA, &GPIO_InitStructure);
  •                 GPIO_SetBits(GPIOA,GPIO_Pin_10);
  •                 //GPIOA.10 中断线以及中断初始化配置   下降沿触发
  •                 GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource10);
  •                 EXTI_InitStructure.EXTI_Line=EXTI_Line10;
  •                 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  •                 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  •                 EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  •                 EXTI_Init(&EXTI_InitStructure);                 //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
  •                 NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
  •                 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =0;
  •                 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  •                 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  •                 NVIC_Init(&NVIC_InitStructure);
  • }
  • void EXTI15_10_IRQHandler(void)
  • {
  •    u8 i=9;
  •    if(EXTI_GetITStatus(EXTI_Line10) != RESET)
  •    {
  •                 /* Disable the Selected IRQ Channels -------------------------------------*/
  •                 NVIC->ICER[EXTI15_10_IRQn >> 0x05] =
  •                 (uint32_t)0x01 << (EXTI15_10_IRQn & (uint8_t)0x1F);
  •                 EXTI_ClearITPendingBit(EXTI_Line10);
  •                 delay_us(30);
  •                 while(i--)
  •                 {
  •                 tmp >>=1;
  •                 if(GPIOA->IDR&0x0400) tmp |=0x80;
  •                 delay_us(104);
  •         }
  •           if((USART_RX_STA&0x8000)==0)
  •           {
  •                         if(USART_RX_STA&0x4000)
  •                         {
  •                         if(tmp!=0x0a) USART_RX_STA=0;
  •                         else USART_RX_STA |=0x8000;
  •                         }
  •                         else
  •                         {
  •                         if(tmp==0x0d) USART_RX_STA|=0x4000;
  •                         else
  •                         {
  •                         USART_RX_BUF[USART_RX_STA&0X3FFF]=tmp ;
  •                         USART_RX_STA++;
  •                         if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收
  •                         }
  •                         }
  •           }
  •                 EXTI_ClearITPendingBit(EXTI_Line10);
  •                 NVIC->ISER[EXTI15_10_IRQn >> 0x05] =
  •                 (uint32_t)0x01 << (EXTI15_10_IRQn & (uint8_t)0x1F);
  •    }
  • }



工程师

Rank: 3Rank: 3

帖子
276
积分
4583 分
金币
1064 个
沙发
发表于 前天 21:28 | 只看该作者
支付宝天天领红包
谢谢,楼主辛苦了!不错的学习资料!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机访问本站

我爱电子技术网 ( 湘ICP备10022953号-6 )

GMT+8, 2018-12-16 23:11 , Processed in 0.063715 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表
牛牛赌博玩法 博顺娱乐 上澳门葡京赌场 24小时娱乐城线路 现金支票怎么取
大红鹰娱乐平台 bet16瑞丰乐投 博九娱乐官网 三公游戏开发 银河官方
博九论坛 澳门威尼斯人手机注册网站 现金网注册送钱 ag游戏大厅二维码 巴黎人娱乐场官网
永利开户娱乐 澳门电玩城在线 澳门新金沙官网线上 伯爵官网 澳门金沙娱乐官方网址