专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

STM32模拟串口(UART)使用!

  1、添加头文件
  首先我们先添加相应的头文件。既然我们要进行对串口的模拟,因此我们要先了解uart相关的通信协议。由于UART的通信方式是由1个起始位,8个数据位,包含一个奇偶校验位,和结束位构成因此我们将使用单片机中的两个普通的IO口电平的高低进行对相应时序的模拟。
  includestm32f10x。hincludevuart2。h2、宏定义
  使用到的io口为defineOI2TXDPDout(6)defineOI2RXDPDin(7)defineBuadRate29600104defineRecive2Byte19接收缓冲器的个数u8len20;接收计数u8USART2buf〔Recive2Byte〕;接收缓冲区
  将IO口相应的位带操作函数进行宏定义从而使得在对不同的电平的进行转换的时候更为方便,并且减少了调用其他函数的过程所消耗的时间,程序执行效率更高。
  在本次的传输过程中我选用的是使用波特率速率为9600,也就是1s中发送9600个字节,因此对每个字节数据进行计算1000000us9600可以得出,发一个字节的数据需要进行大概需要104。16us并且对于相应的电平持续时间要求误差不能超过5因此对我们进行时间的控制要求就显得比较重要了。3、枚举出各个位enum{COMSTARTBIT,COMD0BIT,COMD1BIT,COMD2BIT,COMD3BIT,COMD4BIT,COMD5BIT,COMD6BIT,COMD7BIT,COMSTOPBIT,};u8recvStat2COMSTOPBIT;u8recvData20;4、IOTXD进行模拟voidIO2TXD(u8Data){u8i0;OI2TXD0;delayus(BuadRate29600);for(i0;i8;i){if(Data0x01)OI2TXD1;elseOI2TXD0;delayus(BuadRate29600);DataData1;}OI2TXD1;delayus(BuadRate29600);}
  由于发送的信号是将TXD信号进行拉低处理,因此在拉低TXD相应的IO口之后进行延时处理,再进行循环对我们需要发送的各个位的数据继续进行发送循环发送完成之后将电平拉高代表停止位。5、构建发送函数voidUSART2Send(u8buf,u8len2){u8t;for(t0;tlen2;t){IO2TXD(buf〔t〕);}}
  其中的buf为需要发送的数据,len2为数据长度,进行循环调用IOTXD进行一个字节一个字节的数据发送。6、IO口初始化voidIO2Config(void){GPIOInitTypeDefGPIOInitStructure;初始化gpioNVICInitTypeDefNVICInitStructure;中断初始化函数EXTIInitTypeDefEXTIInitStruct;RCCAPB2PeriphClockCmd(RCCAPB2PeriphAFIORCCAPB2PeriphGPIODRCCAPB2PeriphGPIOC,ENABLE);使能PD,PC端口时钟SoftWareSerialTXDGPIOInitStructure。GPIOPinGPIOPin6;选择io口6GPIOInitStructure。GPIOModeGPIOModeOutPP;推挽输出GPIOInitStructure。GPIOSpeedGPIOSpeed50MHz;IO口速度为50MHzGPIOInit(GPIOD,GPIOInitStructure);GPIOSetBits(GPIOD,GPIOPin6);TXD默认电平拉高SoftWareSerialRXDGPIOInitStructure。GPIOPinGPIOPin7;GPIOInitStructure。GPIOModeGPIOModeIPU;GPIOInitStructure。GPIOSpeedGPIOSpeed50MHz;GPIOInit(GPIOD,GPIOInitStructure);GPIOEXTILineConfig(GPIOPortSourceGPIOD,GPIOPinSource7);对D7的下降沿进行中断采样,当接收到下降沿时代表接收到数据触发中断处理函数EXTIInitStruct。EXTILineEXTILine7;用到了中断7EXTIInitStruct。EXTIModeEXTIModeInterrupt;EXTIInitStruct。EXTITriggerEXTITriggerFalling;下降沿触发中断EXTIInitStruct。EXTILineCmdENABLE;EXTIInit(EXTIInitStruct);初始化中断NVICInitStructure。NVICIRQChannelEXTI95IRQn;中断发生于95的中断之中NVICInitStructure。NVICIRQChannelPreemptionPriority2;NVICInitStructure。NVICIRQChannelSubPriority2;NVICInitStructure。NVICIRQChannelCmdENABLE;NVICInit(NVICInitStructure);}7、定时器初始化voidTIM5IntInit(u16arr,u16psc){TIMTimeBaseInitTypeDefTIMTimeBaseStructure;NVICInitTypeDefNVICInitStructure;RCCAPB1PeriphClockCmd(RCCAPB1PeriphTIM5,ENABLE);时钟使能定时器TIM5初始化TIMTimeBaseStructure。TIMPeriodarr;设置在下一个更新事件装入活动的自动重装载寄存器周期的值TIMTimeBaseStructure。TIMPrescalerpsc;设置用来作为TIMx时钟频率除数的预分频值TIMTimeBaseStructure。TIMClockDivisionTIMCKDDIV1;设置时钟分割:TDTSTcktimTIMTimeBaseStructure。TIMCounterModeTIMCounterModeUp;TIM向上计数模式TIMTimeBaseInit(TIM5,TIMTimeBaseStructure);根据指定的参数初始化TIMx的时间基数单位TIMClearITPendingBit(TIM5,TIMFLAGUpdate);TIMITConfig(TIM5,TIMITUpdate,ENABLE);使能指定的TIM5中断,允许更新中断中断优先级NVIC设置NVICInitStructure。NVICIRQChannelTIM5IRQn;TIM5中断NVICInitStructure。NVICIRQChannelPreemptionPriority1;先占优先级1级NVICInitStructure。NVICIRQChannelSubPriority1;从优先级1级NVICInitStructure。NVICIRQChannelCmdENABLE;IRQ通道被使能NVICInit(NVICInitStructure);初始化NVIC寄存器}
  对TIM5进行初始化操作使得定时器可以检测到各个位的电平持续性时间从而对接收到的数据进行分析。计时结束后进入中断TIM5处理。8、外部中断处理函数voidEXTI95IRQHandler(void){if(EXTIGetFlagStatus(EXTILine7)!RESET)对中断标志位进行采集{if(OI2RXD0){if(recvStat2COMSTOPBIT){recvStat2COMSTARTBIT;将当前的状态设置为开始位TIMCmd(TIM5,ENABLE);开启定时器计数}}EXTIClearITPendingBit(EXTILine7);清除中断标志}}9、定时器中断处理函数voidTIM5IRQHandler(void){if(TIMGetFlagStatus(TIM5,TIMFLAGUpdate)!RESET){TIMClearITPendingBit(TIM5,TIMFLAGUpdate);清除中断标志位recvStat2;将位置移动到第一位的数据if(recvStat2COMSTOPBIT)当运行到停止位时进入{TIMCmd(TIM5,DISABLE);停止tim5USART2buf〔len2〕recvData2;将采集到的各个数据传递给USART2bufif(len2Recive2Byte1)将数据通过回显到串口调试助手中{len20;USART2Send(USART2buf,Recive2Byte);}return;}if(OI2RXD)采集RXD各个电平{recvData2(1(recvStat21));}else{recvData2(1(recvStat21));}}}整体代码vuart2。cincludestm32f10x。hincludevuart2。h软件串口的实现(IO模拟串口)波特率:960018NTXD:PD6RXD:PD7使用外部中断对RXD的下降沿进行触发,使用定时器5按照9600波特率进行定时数据接收。Demo功能:接收11个数据,然后把接收到的数据发送出去defineOI2TXDPDout(6)defineOI2RXDPDin(7)defineBuadRate29600104defineRecive2Byte19接收缓冲器的个数u8len20;接收计数u8USART2buf〔Recive2Byte〕;接收缓冲区enum{COMSTARTBIT,COMD0BIT,COMD1BIT,COMD2BIT,COMD3BIT,COMD4BIT,COMD5BIT,COMD6BIT,COMD7BIT,COMSTOPBIT,};u8recvStat2COMSTOPBIT;u8recvData20;voidIO2TXD(u8Data){u8i0;OI2TXD0;delayus(BuadRate29600);for(i0;i8;i){if(Data0x01)OI2TXD1;elseOI2TXD0;delayus(BuadRate29600);DataData1;}OI2TXD1;delayus(BuadRate29600);}voidUSART2Send(u8buf,u8len2){u8t;for(t0;tlen2;t){IO2TXD(buf〔t〕);}}voidIO2Config(void){GPIOInitTypeDefGPIOInitStructure;NVICInitTypeDefNVICInitStructure;EXTIInitTypeDefEXTIInitStruct;RCCAPB2PeriphClockCmd(RCCAPB2PeriphAFIORCCAPB2PeriphGPIODRCCAPB2PeriphGPIOC,ENABLE);使能PB,PC端口时钟SoftWareSerialTXDGPIOInitStructure。GPIOPinGPIOPin6;GPIOInitStructure。GPIOModeGPIOModeOutPP;推挽输出GPIOInitStructure。GPIOSpeedGPIOSpeed50MHz;IO口速度为50MHzGPIOInit(GPIOD,GPIOInitStructure);GPIOSetBits(GPIOD,GPIOPin6);SoftWareSerialRXDGPIOInitStructure。GPIOPinGPIOPin7;GPIOInitStructure。GPIOModeGPIOModeIPU;GPIOInitStructure。GPIOSpeedGPIOSpeed50MHz;GPIOInit(GPIOD,GPIOInitStructure);GPIOEXTILineConfig(GPIOPortSourceGPIOD,GPIOPinSource7);EXTIInitStruct。EXTILineEXTILine7;EXTIInitStruct。EXTIModeEXTIModeInterrupt;EXTIInitStruct。EXTITriggerEXTITriggerFalling;下降沿触发中断EXTIInitStruct。EXTILineCmdENABLE;EXTIInit(EXTIInitStruct);NVICInitStructure。NVICIRQChannelEXTI95IRQn;NVICInitStructure。NVICIRQChannelPreemptionPriority2;NVICInitStructure。NVICIRQChannelSubPriority2;NVICInitStructure。NVICIRQChannelCmdENABLE;NVICInit(NVICInitStructure);}voidTIM5IntInit(u16arr,u16psc){TIMTimeBaseInitTypeDefTIMTimeBaseStructure;NVICInitTypeDefNVICInitStructure;RCCAPB1PeriphClockCmd(RCCAPB1PeriphTIM5,ENABLE);时钟使能定时器TIM5初始化TIMTimeBaseStructure。TIMPeriodarr;设置在下一个更新事件装入活动的自动重装载寄存器周期的值TIMTimeBaseStructure。TIMPrescalerpsc;设置用来作为TIMx时钟频率除数的预分频值TIMTimeBaseStructure。TIMClockDivisionTIMCKDDIV1;设置时钟分割:TDTSTcktimTIMTimeBaseStructure。TIMCounterModeTIMCounterModeUp;TIM向上计数模式TIMTimeBaseInit(TIM5,TIMTimeBaseStructure);根据指定的参数初始化TIMx的时间基数单位TIMClearITPendingBit(TIM5,TIMFLAGUpdate);TIMITConfig(TIM5,TIMITUpdate,ENABLE);使能指定的TIM5中断,允许更新中断中断优先级NVIC设置NVICInitStructure。NVICIRQChannelTIM5IRQn;TIM4中断NVICInitStructure。NVICIRQChannelPreemptionPriority1;先占优先级1级NVICInitStructure。NVICIRQChannelSubPriority1;从优先级1级NVICInitStructure。NVICIRQChannelCmdENABLE;IRQ通道被使能NVICInit(NVICInitStructure);初始化NVIC寄存器}voidEXTI95IRQHandler(void){if(EXTIGetFlagStatus(EXTILine7)!RESET){if(OI2RXD0){if(recvStat2COMSTOPBIT){recvStat2COMSTARTBIT;TIMCmd(TIM5,ENABLE);}}EXTIClearITPendingBit(EXTILine7);}}voidTIM5IRQHandler(void){if(TIMGetFlagStatus(TIM5,TIMFLAGUpdate)!RESET){TIMClearITPendingBit(TIM5,TIMFLAGUpdate);recvStat2;if(recvStat2COMSTOPBIT){TIMCmd(TIM5,DISABLE);USART2buf〔len2〕recvData2;if(len2Recive2Byte1){len20;USART2Send(USART2buf,Recive2Byte);}return;}if(OI2RXD){recvData2(1(recvStat21));}else{recvData2(1(recvStat21));}}}vuart2。hifndefVUART2HdefineVUART2Hincludestm32f10x。hvoidIO2TXD(u8Data);voidUSART2Send(u8buf,u8len);voidIO2Config(void);voidTIM5IntInit(u16arr,u16psc);endif
  本文来源网络,免费传达知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除。

海天味业这次人人喊打有点冤,千禾味业引领下行业新风向已现海天味业食品添加剂双标风波在辛吉飞为首的一众自媒体号渲染下持续发酵,公司10月5日在官方微博上再度发布声明称,其售卖的国内国外产品内控标准一致,不存在网友爆料称国内售卖的海天酱油含穿越火线cfm4a1电音觉醒的详细条件及攻略在穿越火线cf之中我们是需要去使用多个枪械武器去进行战斗的,这个其中的枪械是核心也是最重要的,其中有着一个m4a1电音基本人人都想要收藏一把。我们需要使用这个去进行战斗的,并且这个音响知识聊聊天逸HiFi功放与音箱搭配的技术要点到目前为止,天逸音响在市面上的主流HIFI功放主要有AD1前后级套装,AD2PRO大功率纯甲类合并式功放AD3PRO纯甲类小旗舰功放主打多功能和高性价比的AD86D中端HiFi功放3000元之内的手机主打拍照功能和游戏功能,分别应该怎么选?目前,智能手机已经成为和每个人关系最密切的电子产品,不管是老人孩子还是上班族或者是学生,每个人手里几乎都有一部手机,有不少人同时有两部手机。手机普及程度之所以如此高,主要是目前的手全国秋粮收获过四成陆续进入收获高峰根据农业农村部最新农情调度显示,目前全国秋粮收获进展顺利,进度已过四成。在吉林梨树,330多万亩玉米正加紧收获,今年当地保护性耕作推广面积超过了玉米耕种面积的85以上,通过秸秆覆盖太原市迎泽区古建的顶上功夫我国古代建筑的屋顶样式非常丰富,而且等级分明,由高到低依次是庑殿顶歇山顶悬山顶硬山顶攒尖顶盝顶等。每种屋顶又有单檐与重檐起脊与卷棚的区别,个别建筑也有采用叠顶盔顶十字脊歇山顶及拱顶国庆期间国内客运航班量4。59万班次,同比下降42据飞常准民航看板数据显示,2022国庆期间(10月1日7日)国内航线实际执行客运航班量约4。59万班次,同比2021年下降42日均执行国内客运航班量6557班次。9月30日和10月惠生活会生活新零售打造全新生活每个人都向往着美好的生活,那我们所追求的美好生活到底是什么?是物质的满足还是精神世界的丰富多彩?每一个人都同时存在着多种生活需要,可大体上将这些需要分为生存需要成长需要舒适或快乐需Cannon出任SunCable主席,领导世界上最大的太阳能和电池项目SunCable是世界上最大的太阳能和电池存储项目的开发商,最近任命科技亿万富翁迈克坎农布鲁克斯(MikeCannonBrookes)为该公司的新主席,这是对这家大型企业发展的最新公积金贷款利率七年来首降贷款80万减少利息2。35万买房人再迎利好政策,继房贷利率两度下调之后,备受关注的公积金贷款利率也迎来了7年来的首次下调。9月30日,中国人民银行宣布,自2022年10月1日起,下调首套个人住房公积金贷款利率通知油价预期下调!10月8日,调整后的汽油价猪价粮价如何丰收中国10月10日24时,国内成品油价将会迎来第19轮调价,且预期下调!近期关于原油最大的新闻当属OPEC成员国一致决定从下个月开始将石油日均产量下调200万桶,这一举动也引起了
14,19,12,又12,恩比德有惊喜,76人避开克星,保底东决北京时间2月28日,nba常规赛东部的一场强强对话中,热火10199险胜76人。上半场,恩比德出场17分钟6投4中,罚球6中6拿到半场最高的14分外加4篮板1助攻,但出现了4次失误大麻烦!当红国脚丑事曝光被实名举报,李铁陈戌源罪加一等最近这段时间,中国足球可以说是新闻不断,一方面新任的足球男足主教练已经出炉,包括新一期的国家队集训名单也出来,另一方面,大家依然在关注着前中国足球主教练李铁,包括足协主席陈戌源被抓足坛劲爆一夜意甲半场神仙球,拉齐奥绝杀,梅西7夺世界足球先生北京时间2月28日凌晨,世界足坛的盛事国际足联年度颁奖礼颁出多项大奖,五大联赛结束了多场关键之战。拉齐奥世界波绝杀,佛罗伦萨的比拉吉上演半场吊射神仙球。阿根廷成年度颁奖礼最大赢家,中子音乐播放器(NeutronMusicPlayer)使用经验中子音乐播放器(NeutronMusicPlayer)被誉为史上最强安卓手机音乐播放神器,以下是一些个人使用经验,仅供参考。1。最好断开网络安装,安装过后,先不要启动中子音乐播放器OLED屏iPadPro价格预计高于预期因屏幕成本更高来源TechWeb2月28日消息,据外媒报道,上周曾有消息称,苹果已向三星显示和LG显示这两大面板厂商,下达了10。9英寸和12。9英寸OLED屏幕的研发订单,用于下一代的iPad2023年商务人士的理想笔电来了,性能强劲轻巧便携续航持久对于商务人群来说,笔记本电脑不仅需要满足日常办公需求,还需要有足够的性能支撑设计剪辑制图等高阶任务需求,甚至是业余游戏开黑也能轻松胜任。这样一款能够兼顾办公和娱乐的商务笔记本该如何AMDRadeonRX7900XT价格大跌,华擎非公显卡海外已跌至约人民币5700元AMD在2022年11月3日举办了名为togetherweadvancegaming的特别直播活动,正式发布了基于新一代RDNA3架构GPU的RadeonRX7900XTX和Rad美国的天性篮球,欧洲的理性篮球,中国男篮向何处去?小时候特别喜欢篮球。当时正值文革时期,学校不是停课就是复课闹革命,每天没有事做,整天长在篮球场上,篮球成了我的唯一和最爱,它成了我童年少年时代最大的快乐和幸福。我也曾代表学校参加市广东丰顺县,谢汉光潜伏台湾42年后归来发现子孙满堂发妻仍等他广东丰顺县,有一个位名叫谢汉光的人民英雄,为什么说他是人民英雄呢?因为,谢汉光早年,被派去台湾做卧底工作,这一做就长达几十年,再回到老家时已是年过6旬的老人了。让谢汉光没想到的是,忙趁春风放纸鸢春光明媚,人们踏青出游,放飞风筝,乐享春日美好时光。2月26日,在四川省宜宾市翠屏区竹文化公园内,一名小女孩在放风筝。新华社发(彭珉翔摄)2月27日,小朋友在湖北省宣恩县仙山贡水旅ChatGPT苏州VS杭州哪个更强更宜居?上有天堂下有苏杭可信吗?问苏州VS杭州哪个更强?哪个更宜居?ChatGPT苏州和杭州都是中国著名的历史文化名城和旅游胜地,两个城市的发展水平和宜居程度都比较高。下面是对比它们的一些方面经济发展苏州和杭州都
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网