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

深圳 网站建设培训班一个wordpress多个网站

深圳 网站建设培训班,一个wordpress多个网站,wordpress后台设置发布时间,龙华建网站多少钱前言#xff1a; 串口是很重要的#xff0c;有许多模块通信接口就是串口#xff0c;例如gps模块#xff0c;蓝牙模块#xff0c;wifi模块还有一些精度比较高的陀螺仪模块等等#xff0c;所以学会了串口之后#xff0c;这些听起来很牛批的模块都能够用起来了。此外#…前言 串口是很重要的有许多模块通信接口就是串口例如gps模块蓝牙模块wifi模块还有一些精度比较高的陀螺仪模块等等所以学会了串口之后这些听起来很牛批的模块都能够用起来了。此外单片机的之间的通信也大多用串口如距离比较长的RS485,RS232,光纤通信等等有线通信也只是电平转换芯片不一样但是代码层面完成是一样的作为单片机开发串口是很必要熟练的。在学习的第二阶段尽量还是照着手册来编写代码或者说根据自己的思路来嫖代码而不是像初次学习一样代码、思路都嫖别人的。这样才能最大限度的检验自己的能力当然做项目怎样都成怎么方便怎么来。 思路 下面就来记录记录我个人的编码思路首先由下图可以看到串口的模式还是挺多的 这样相应的寄存器也就必然很多所以从一开始就需要明确我们需要的是哪种模式然后就只关注这个模式与之无关的寄存器都可以忽略如此编码就简单清晰了。以最常用的异步模式为例 手册没有讲初始化流程所以只能按照经验来写代码了回忆串口无非就是串口时钟使能配置数据位停止位等配置波特率使能串口从寄存器读出数据/向寄存器写入数据。一般为了方便数据处理还加一个接收中断。但是~串口不只是串口还涉及GPIO初始化GPIO复用配置。 1.初始化GPIO相关配置 三部曲时钟IO复用啥 GPIOx-AFR这个寄存器就是将某个GPIO管脚复用成指定功能的。下面AF虽多但是要根据数据手册引脚说明来选芯片没有设计的当然选了也没用。我没有在手册找到AF对应的是什么不过正点原子的代码有写也不知哪里找的。 //AF0~15设置情况(这里仅是列出常用的,详细的请见407数据手册,56页Table 7): //AF0:MCO/SWD/SWCLK/RTC AF1:TIM1/TIM2; AF2:TIM3~5; AF3:TIM8~11 //AF4:I2C1~I2C3; AF5:SPI1/SPI2; AF6:SPI3; AF7:USART1~3; //AF8:USART4~6; AF9;CAN1/CAN2/TIM12~14 AF10:USB_OTG/USB_HS AF11:ETH //AF12:FSMC/SDIO/OTG/HS AF13:DCIM AF14: AF15:EVENTOUT 编码如下 1.时钟 RCC-AHB1ENR|10; //GPIOA时钟附属于AHB1 2.IO GPIO_Set(GPIOA,PIN9|PIN10,GPIO_MODE_AF,0,0,0);//PA9,PA10,都配置为复用模式其他电气属性如上下拉之类的可以根据需要配置不配置也行的。 3.复用啥直接用正点原子的函数里面其实就是对GPIOx-AFRH和GPIOx-AFRL这两个寄存器进行编写不过正点原子这个封装的挺好的一目了然 GPIO_AF_Set(GPIOA,9,7); //PA9,AF7 GPIO_AF_Set(GPIOA,10,7);//PA10,AF7 2.串口相关初始化 目的是串口时钟使能配置数据位停止位,接收中断使能串口等配置波特率从寄存器读出数据/向寄存器写入数据。 由手册第66页可知USART1时钟隶属于APB2 1.使能串口1时钟     RCC-APB2ENR|14;    2.配置波特率 根据公式算然后填到对应的位里面去 float temp;u16 mantissa; //整数部分u16 fraction; //小数部分temp(float)(pclk2*1000000)/(bound*16);//得到USARTDIVOVER80mantissatemp; //得到整数部分fraction(temp-mantissa)*16; //得到小数部分OVER80 mantissa4;mantissafraction; USART1-BRRmantissa; //波特率设置 这个是正点原子那嫖的适用于多种时钟多种波特率的情况挺好用的。 3.配置数据位停止位中断等 USART_CR1检索只看和异步通信有关的位其他的不管 bit[2]:        接收使能 bit[3]:        发送使能 bit[5]:        接收中断使能 bit[10]:       关/开奇偶检验 bit[12]:       置零1 起始位8 数据位n 停止位 bit[13]:        串口关闭/使能后面记得给这个串口中断分组以及设置优先级 bit[15]:        0:16倍过采样率18倍过采样率这个是和波特率计算有关的设为0 其他就无所谓了好像这个寄存器就完全够配置我们所需了 USART1-CR1 015 | 113 | 012 | 010 | 15 | 13 | 12 ; //中断分组及优先级中断后面有时间再讲其核心思想就是分组中断线设优先级三部曲 MY_NVIC_Init(3,3,USART1_IRQn,2);//组2最低优先级 4.完整的串口初始化代码如下 void uart_init(u32 pclk2,u32 bound) { float temp;u16 mantissa;u16 fraction; //1.GPIO初始化相关RCC-AHB1ENR|10; //使能PORTA口时钟 GPIO_Set(GPIOA,PIN9|PIN10,GPIO_MODE_AF,0,0,0);//PA9,PA10,复用功能GPIO_AF_Set(GPIOA,9,7); //PA9,AF7GPIO_AF_Set(GPIOA,10,7);//PA10,AF7 //2.使能串口1时钟 RCC-APB2ENR|14; //3.波特率设置temp(float)(pclk2*1000000)/(bound*16);//得到USARTDIVOVER80mantissatemp; //得到整数部分fraction(temp-mantissa)*16; //得到小数部分OVER80 mantissa4;mantissafraction; USART1-BRRmantissa; //波特率设置 //4.配置数据位停止位中断等USART1-CR1 015 | 113 | 012 | 010 | 15 | 13 | 12 ;//中断分组及优先级中断后面有时间再讲其核心思想就是分组中断线设优先级三部曲MY_NVIC_Init(3,3,USART1_IRQn,2);//组2最低优先级 } 运行效果 其他代码不改动换上自己思路写的代码运行ok 3.中断服务函数 a.它最原始的模样 void USART1_IRQHandler(void) {u8 res; if(USART1-SR(15))//接收到数据的标志置1----有数据{ resUSART1-DR; //取出接收到的数据----1B} } 如果要发送数据可以编写如下 u8 res; USART1-DR res;//要发送的数据 1B while((USART1-SR0X40)0);//等待发送结束 b.正点原子给的 u8 USART_RX_BUF[USART_REC_LEN]; //里面存着接收到的数据u16 USART_RX_STA0; //是否有数据标志接收到的字节数//下面这个不用改它原封不动放代码里就能用 void USART1_IRQHandler(void) {u8 res; if(USART1-SR(15))//接收到数据{ resUSART1-DR; if((USART_RX_STA0x8000)0)//接收未完成{if(USART_RX_STA0x4000)//接收到了0x0d{if(res!0x0a)USART_RX_STA0;//接收错误,重新开始else USART_RX_STA|0x8000; //接收完成了 }else //还没收到0X0D{ if(res0x0d)USART_RX_STA|0x4000;else{USART_RX_BUF[USART_RX_STA0X3FFF]res;USART_RX_STA;if(USART_RX_STA(USART_REC_LEN-1))USART_RX_STA0;//接收数据错误,重新开始接收 } }} } } 其中 判断有无数据接收 if(USART_RX_STA0x8000){。。。。。。} 得知数据共有多少B int lenUSART_RX_STA0x3fff;//得到此次接收到的数据长度 数据存放的数组 USART_RX_BUF[] 相对来说以及挺方便的了~下面还有一个比赛常用的自定义的协议 c.自定义协议 首先在usart.c中加入变量 /*更改变量 BEGIN-- */ uint8_t uart1_rxbuff;//引入该.h可使用 uint8_t uart2_rxbuff;//引入该.h可使用 uint8_t uart3_rxbuff;//引入该.h可使用uint8_t sendBuf[1]; u8 uart1_sdbuffer[11]{0x2c,0x12,0x11,0x22,0x33,0x5b,0,0,0,0};//从索引2开始赋值 /*更改变量 END-- */ 在usart.h中导出方便别的文件使用 extern uint8_t uart1_rxbuff; extern uint8_t uart2_rxbuff; extern uint8_t uart3_rxbuff;extern uint8_t uart1_sdbuffer[11]; 下面是协议解析函数自定义的协议是 协议头0x2c,0x12 协议尾0x5b想要让协议数据位变多只需要修改变量RxBuffer1[]的定义即可 //解析接收的数据 最多11哥两个帧头一个帧尾其他是数据位 void Portocol_Receive_Data(uint8_t com_data) {uint8_t i;static uint8_t RxCounter10;//计数static uint8_t RxBuffer1[11]{0};static uint8_t RxState 0; static uint8_t RxFlag1 0;u8 pi0;//printf(%x\t,com_data);//打印调试if(RxState0com_data0x2C) //0x2c帧头 RxCounter11{RxState1;RxBuffer1[RxCounter1]com_data; }else if(RxState1com_data0x12) //0x12帧头 RxCounter12{RxState2;RxBuffer1[RxCounter1]com_data;}else if(RxState2)//开始接收数据位{ RxBuffer1[RxCounter1]com_data;if(RxCounter110||com_data 0x5B){//RxCounter1-1是帧尾if(RxBuffer1[RxCounter1-1] 0x5B)//接收到贞结尾了{/* USER CODE BEGIN 2 */ // for(i 0; i 10; i) // { // printf(%x\t,RxBuffer1[i]); // } // printf(\r\n);USART1_Portocol_Send_Data(); // printf(\r\n);/* USER CODE END 2 */RxFlag1 0;RxCounter1 0;RxState 0;}else //接收错误{RxState 0;RxCounter10;for(i0;i11;i){RxBuffer1[i]0x00; //将存放数据数组清零}}}}else //接收异常{RxState 0;RxCounter10;for(i0;i10;i){RxBuffer1[i]0x00; //将存放数据数组清零}} } 中断服务函数是这样滴 void USART1_IRQHandler(void) {if(USART1-SR(15))//接收到数据{ uart1_rxbuff USART1-DR;Portocol_Receive_Data(uart1_rxbuff);} } 另外还有一个协议配套的发送函数 要修改发送的内容只需修改uart1_sdbuffer数组的内容即可 //串口X发送函数 void USART1_Portocol_Send_Data(void) {u8 i;for(i 0; i 10; i){USART1-DRuart1_sdbuffer[i];//要发送的数据 1Bwhile((USART1-SR0X40)0);//等待发送结束} } 效果如下 在协议代码中下面这部分就是给你自由发挥的进到这段代码里说明成功接收到了按协议格式发来的信息; 4.拓展到其他串口 复用到其他的串口也很简单仿照把发送呀接收呀里面的寄存器改一改就行了 比赛常用的还是自定义协议的串口比如双车用蓝牙通讯呀或者stm32和openmv通讯几乎都要自己写一个协议去收发数据这样才会可靠。 完~
http://www.pierceye.com/news/644032/

相关文章:

  • 手机网站专题网站建设私活
  • 自建网站 备案视频号广告推广
  • 青岛网站优化东莞市场监督管理局官网
  • 深圳珠宝网站设计临沂seo优化
  • 东莞网站建项目代理
  • 心理咨询网站开发营销型网站的建设要求都有什么
  • 优化网站要怎么做中国外协机械加工订单网
  • 运动健身型网站开发永久网站空间
  • 好的网站建设公司排名小程序怎么引流推广
  • 建设部网站 光纤到户平顶山 网站建设公司
  • 网站建设费计入哪个科目赛罕区城乡建设局网站
  • 计算机协会网站模板如何做微信下单小程序
  • 购物网站开发流程图大连装修公司
  • 网站开发定制推广杭州手表网站域名
  • 惠州网站建设方案推广企业网站必备模块
  • 网站内页产品做跳转做电商有哪些平台
  • 如何自建网站服务器wordpress下载权限
  • 重庆专业网站设计服务做染料的网站
  • 长春模板建站公司浙江住房和建设厅网站
  • 网站建设公司 佛山南京移动网站建设
  • 网站建设目录规范微信h5网站开发
  • 做ppt卖给网站枣庄做网站优化
  • 新乡营销型网站建设做软件的中介网站
  • 延边州建设局网站软件公司主要做哪些
  • 建设网站带后台管理程序制作软件
  • 榆林市住房和城市建设局网站梁志天设计公司项目
  • 建设网站怎么搞做非法网站判刑多少年
  • 做查询网站 发布数据wordpress nextapp
  • 福鼎建设局网站首页上海社区网站建设
  • 企业网站免费推广方案wordpress文章类模板