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

做普通网站多少钱html 标签 wordpress

做普通网站多少钱,html 标签 wordpress,企业对电子商务网站的建设,wordpress文章推送公众号串口USART通信 通用UART介绍 1.通信的概念 计算机与外界进行信息交换的过程称之为通信。 在通信的过程中#xff0c;通信双方都需要遵守的规则称之为通信协议。 硬件协议#xff1a;将数据以什么样的方式传输过去 软件协议#xff1a;将数据以什么样的顺序传输过去 2.常用…串口USART通信 通用UART介绍 1.通信的概念 计算机与外界进行信息交换的过程称之为通信。 在通信的过程中通信双方都需要遵守的规则称之为通信协议。 硬件协议将数据以什么样的方式传输过去 软件协议将数据以什么样的顺序传输过去 2.常用的通信方式   ①并行通信---LCD屏 所传输的数据的各个二进制位数据都是同时发送或接收。 优点通信速度快。 缺点由于有多少位的二进制数据就需要多少根数据线所以说通信成本比较高。 一般适合在近距离场所使用。 ②串行通信----串口 所传输的数据的各个二进制位数据按照顺序一位一位的发送或者接收。 优点串行通信一般只需要1-2根数据线所以说通信成本比较低。 缺点通信速度比较慢。 一般适合在远距离场所使用。 3.串行通信种类  ①异步通信    异步通信概念 异步通信指收发双方使用的时钟源提供时钟脉冲不同不受到同一根时钟线的控制在通信时不要求基本频率相等。 异步通信数据格式 在异步通信的过程数据或字符都是逐帧传输。 异步传输的数据帧为起始位数据位校验位结束位。 数据传输的方式为先发低位LSB再发高位(MSB)从起始位到结束位构成了完整的一帧。  起始位使用1个位的低电平“0”来表示数据通信的开始。   数据位串行通信所需要传输的数据数据位长度为5-8位常用的是8位--1byte 奇偶校验位校验位在串行通信中是可选项用于检验传输的数据是否正确检验方法为“奇校验”和“偶校验”。 停止位数据缓存区使用高电平“1”来表示数据通信的结束停止位长度为0.5位、1位、1.5位、2位、2.5位停止位数越大传输的速度越慢。 奇校验“数据位”加上“校验位”后使得传输的数据中“1”的个数为奇数个。 偶校验“数据位”加上“校验位”后使得传输的数据中“1”的个数为偶数个。 例如 数据位 校验位 1010 0011 奇校验1 偶校验0 0100 0000 奇校验0 偶校验1 ②同步通信 同步通信概念 通信双方受到同一根时钟源时钟线的控制其时钟频率相等。 同步通信数据帧格式 同步通信发送的数据开始是以“同步字符”来表示的一般约定为1-2个字节当接收方接收到同步字符后就表示接受下来收到的数据为需要发送的数据流数据的位数不确定。 4.串行通信的数据传输速度   串行通信数据的传输速度称为波特率也叫比特率是指一秒钟内所传输的数据(二进制)位数英文简称BPS 例假设数据传输的速率为120个字符每秒每个字符有1个起始位8个数据位以及1个停止位构成其串行波特率是多少    每个字符的位数181 10   每秒传输的位数120*10/s 1200 BPS 5.串行通信工作方式 ①单工制式只有一根数据线数据在甲机和乙机之间只允许单方向传输。 ②半双工只有一根数据线数据在甲机和乙机之间允许双方向的传输但是在同一时刻只允许数据的发送或者接收。 ③全双工有两根数据线数据在甲机和乙机之间允许双方向的传输并且可以同时在同一时刻进行数据的发送或者接收。 6.串口数据发送的格式       串口发送数字、字母、英文符号按照ASCII码表的数值发送。 串口发送中文汉字,中文符号是按照“GB2312”简体中文编码表的数值发送。 USART模块介绍STM3240x 1.USART模块概述 STM32F40X芯片的USART模块是通用同步/异步收发器能够灵活地与外部设备进行全双工数据交换此芯片一共有6个独立的USART模块编号为USART1-6。 可以实现同步/异步通信的是USART1、2、3、6只能实现异步通信的是UART4、5。 同步串口可以是异步串口但是异步串口不能是同步串口。 全双工有两根数据线TX RX   串口最远传输距离15米左右 串口连接交叉相连 USART:  TX  RX  SCLK--时钟线-------同步串口 UART:   TX  RX               ------异步串口 只有串口连接方式是交叉相连  TX---RX   RX----TX 2.USART模块框图 ①串口发送数据的过程 1在MCU内定义需要发送的数据内核发送数据 2MCU将需要发送的数据通过数据总线写入到“发送数据寄存器(数据寄存器)” /****************以下部分由硬件自动完成无需配置************************/ 3当“发送数据寄存器”被写入后将数据并行发送到“发送移位寄存器”并且由硬件自动产生一个“发送数据寄存器”为空的标志。 4“发送移位寄存器”根据已经设置好的波特率时钟脉冲把数据按照顺序一位一位的发送到数据发送管脚TX。 当“发送移位寄存器”为空并且“发送数据寄存器”也为空的时候由硬件自动产生一个“传输完成”的标志。 5数据在串口发送管脚发送数据数据通过USB转串口芯片电平转换芯片后由USB数据线传输到电脑上位机上。 ②串口接收数据的过程 1电脑上位机通过USB线发送数据数据通过USB转串口芯片发送到串口接收数据管脚RX 2接收管脚根据已经设置好的波特率时钟脉冲一位一位的把数据传输到“接收移位寄存器”中。被动接收没有“满”标志满时自动传输 3当“接收移位寄存器”接收完数据之后并行把数据传输到“接收数据寄存器”中并且会由硬件自动产生一个“接收数据寄存器”为满的标志。 /***************以上部分由硬件自动完成无需配置************************/ 4CPU通过数据总线读出“接收数据寄存器”的内容。 3. USART模块特征 可以支持波特率的时钟配为16倍过采样或或者8倍过采样来对不同时钟速度之间的误差容忍。支持小数位波特率发生器。可以根据实际情况配置数据位长度为8位如果不使用奇偶校验位则数据位为8位如果使用奇偶校验位则数据位为7位或者数据位长度为9位包含了校验位。停止位支持可以配置为1位或2位。支持DMA数据高速传输。发送器和接收器具有单独使能位USTAR单独开启时钟。USART模块有3个状态标志接收缓冲区已满、发送缓冲区为空、传输完成。USART模块不仅可以发送奇偶校验位也可以对接收到的数据进行奇偶校验。USART模块具有4个错误检测标志 溢出错误原来的数据没有被读出又来了新的数据则产生溢出错误。溢出错误状态时“接收数据寄存器”保留原来旧的数值丢弃新的数值、 噪声错误干扰错误、 帧错误数据帧格式错误、 奇偶校验错误 10.USART模块的中断源 CTS变化硬件流发送变化、 LIN停止符号检测LIN数据传输完成、 发送数据寄存器为空、 发送完成、 接收数据寄存器为满接收到线路空闲USART线路在忙碌状态转换为空闲的时刻、 溢出错误、 帧错误、 噪声错误、 奇偶校验错误。 只要发生上面的状态中的其中一条前提是开启了中断都会产生一个USART中断。 11.多处理器通信如果地址不匹配则进入静默模式。 12.从静默模式唤醒通过线路空闲检测或地址标记检测。 USART模块配置STM3240x 1.STM3240x外设功能管脚复用GPIO配置 STM32F40x外设功能管脚复用概念 STM32F40X芯片所有的片内外设芯片以内内核以外模块的功能管脚都是使用GPIO端口的复用功能并且每个IO端口都会对应多个复用功能管脚。 STM32F40x外设功能管脚复用 STM32F40x外设管脚复用相应寄存器 ①GPIO复用功能低位寄存器 (GPIOx_AFR[0]) (x A..I) 寄存器作用设置STM32F40X芯片GPIOx组端口0-7对应的外设模块复用功能每4位控制一个IO口。把对应的“复用功能编码”写入相对应的位则设置对应端口为复用功能。 ②GPIO 复用功能高位寄存器 (GPIOx_AFR[1]) (x A..I) 寄存器作用设置STM32F40X芯片GPIOx组端口8-15对应的外设模块复用功能每4位控制一个IO口。把对应的“复用功能编码”写入相对应的位则设置对应端口为复用功能。 STM32F40x外设管脚复用步骤 例如 1需要使用的复用端口是否满足复用的前提条件。 2配置端口模式寄存器配置为复用功能。 3根据具体的端口管脚选择对应的复用功能寄存器 0-7使用低位寄存器 8-15使用高位寄存器。 4选择对应的“复用功能编码”配置复用功能寄存器。 RCC-AHB1ENR | 10; //开启A口时钟 //PA9 GPIOA-MODER ~(39*2); GPIOA-MODER | 29*2; //配置复用功能 GPIOA-AFR[1] | 7(9-8)*4; //配置为串口功能 //PA10 GPIOA-MODER ~(310*2); GPIOA-MODER | 210*2; //配置复用功能 GPIOA-AFR[1] | 7(10-8)*4; //配置为串口功能 2.STM3240x芯片USART模块相关寄存器 状态寄存器 (USART_SR) 寄存器作用检测串口模块的具体功能的当前状态数据是否接收/发送完成寄存器是否为空如果发生了对应的状态硬件会自动置1并且可以用来申请中断。 数据寄存器 (USART_DR) 寄存器作用存放串口需要发送和接收的数据数据寄存器包含了“接收数据寄存器”和“发送数据寄存器”这两个寄存器共用同一个寄存器地址以及空间。 注当CPU往数据寄存器写数据的时候数据寄存器就是“发送数据寄存器”当CPU对数据寄存器进行读操作的时候数据寄存器就是“接收数据寄存器”。 波特率寄存器 (USART_BRR)    波特率USART模块的指定波特率时钟大小115200/9600等-----已知 fckUSART模块挂载的时钟总线频率HZ--------已知   1MHZ 10^6HZ OVER8USART模块采样滤波的选择采用16倍过采样则为数字“0”采用8倍过采样则为数字“1” USARTDIV存放USART模块波特率寄存器的计算值。 注USARTDIV计算值不能直接放入波特率寄存器中而是分别计算出整数部分和小数部分分别写入到寄存器里面。 假设设置的波特率为11520016倍过采样使用的事USART1挂载在APB2上时钟频率为72MHZ Float USARTDIV int ZHENG,XIAO; USARTDIV 72000000.0/(8*(2-0)*115200)  //39.0625 ZHENG (int)USARTDIV;//39  0010 0111 XIAO (USARTDIV - ZHENG)*16;   //0001 USAT1-BRR ZHENG4 | XIAO;  // 0010 0111  0001 控制寄存器 1 (USART_CR1) 寄存器作用设置串口模块对应的工作模式以及相关参数 控制寄存器 2 (USART_CR2) 寄存器作用设置串口模块对应的工作模式以及相关参数 控制寄存器 3 (USART_CR3) 寄存器作用设置串口模块对应的工作模式以及相关参数 USART模块编程思路 ①找到USART模块对应的GPIO端口 -----CH340----PA9  PA10 1先开对应的IO口时钟 2设置端口功能复用功能 3通过复用功能寄存器选择具体的复用功能 GPIO时钟 ​​​​​​​        串口USART时钟 GPIO寄存器配置 ②USART模块初始化 1使能USART对应的时钟 2设置相关的工作参数---控制寄存器 发送接收开启、数据位数、是否需要校验、停止位等。 3如果需要中断则开启对应中断位 USART1配置 ③设置USART模块波特率 1先设置采样参数16倍过采样还是8倍过采样 2根据波特率计算公式计算出波特率的计算数值 3将波特率计算值分成小数和整数部分写入到波特率寄存器中 ④使能串口 ⑤USART模块发送数据 1先检测“发送数据寄存器是否为空”或“传输完成” 2把需要发送的数据写入到数据寄存器 ⑥USART模块接收数据 1轮询判断“接收数据寄存器为满” 2读取数据寄存器中的内容 “usart.c” /************************* 函数功能串口USART1初始化 硬件接口 PA9 --- USART1_TX --- 复用功能 PA10--- USART1_RX --- 复用功能 GPIOA --- AHB1 168MHZ USART1 --- APB2 84MHZ **************************/void USART1_Init(uint32_t brr) {float USARTDIV; //波特率寄存器存放值uint32_t fck 84000000.0; //USART1挂载在APB2的频率84MHZuint16_t integer,decimal; //波特率寄存器存放值的整数/小数RCC-AHB1ENR | 10; //开启A口时钟/*①*///PA9GPIOA-MODER ~(39*2); GPIOA-MODER | 29*2; //配置复用功能GPIOA-AFR[1] | 7(9-8)*4; //配置为串口功能//PA10GPIOA-MODER ~(310*2);GPIOA-MODER | 210*2; //配置复用功能GPIOA-AFR[1] | 7(10-8)*4; //配置为串口功能 /*②*/ //USARTRCC-APB2ENR | 14; //开启USART1时钟USART1-CR1 ~(115); //串口配置16倍过采样USART1-CR1 ~(112); //配置8位数据USART1-CR2 ~(312); //1位停止位 /*③*///波特率USARTDIV fck/(8*(2 - 0)*brr);integer USARTDIV; //整数部分decimal (USARTDIV - integer)*16; //小数部分USART1-BRR integer4 | decimal; //数据放入波特率寄存器 /*④*/USART1-CR1 | 13; //使能发送器USART1-CR1 | 12; //使能接收器USART1-CR1 | 113; //使能串口} “main.c” USART1_Init(115200);while(1){while(!(USART1-SR 16)){//轮询检测接收数据寄存器标志位是否已满}USART1-DR cha; //读出接收数据寄存器内容while(!(USART1-SR 15)) {//轮询检测发送数据寄存器标志位}cha USART1-DR; //发送} 改写printf函数 目标使用printf函数通过串口USART1向上位机发送信息。 例如printf(hello world\r\n); int a10; printf(a %d\r\n,a); /******************************** 函数功能修改printf底层代码 注意不可更改 魔术棒Target---Use MicroLIB *********************************/ int fputc(int data,FILE* file) {while(!(USART1-SR 16)){}USART1-DR data; //清标志位发送数据return data; } 按键控制向上位机传输字符串示例 “usart.c” #include usart.h #include stdio.h /************************* 函数功能串口USART1初始化 硬件接口 PA9 --- USART1_TX --- 复用功能 PA10--- USART1_RX --- 复用功能 GPIOA --- AHB1 168MHZ USART1 --- APB2 84MHZ **************************/void USART1_Init(uint32_t brr) {float USARTDIV; //波特率寄存器存放值uint32_t fck 84000000.0; //USART1挂载在APB2的频率84MHZuint16_t integer,decimal; //波特率寄存器存放值的整数/小数RCC-AHB1ENR | 10; //开启A口时钟//PA9GPIOA-MODER ~(39*2); GPIOA-MODER | 29*2; //配置复用功能GPIOA-AFR[1] | 7(9-8)*4; //配置为串口功能//PA10GPIOA-MODER ~(310*2);GPIOA-MODER | 210*2; //配置复用功能GPIOA-AFR[1] | 7(10-8)*4; //配置为串口功能//USARTRCC-APB2ENR | 14; //开启USART1时钟USART1-CR1 ~(115); //串口配置16倍过采样USART1-CR1 ~(112); //配置8位数据USART1-CR2 ~(312); //1位停止位//波特率USARTDIV fck/(8*(2 - 0)*brr);integer USARTDIV; //整数部分decimal (USARTDIV - integer)*16; //小数部分USART1-BRR integer4 | decimal; //数据放入波特率寄存器 USART1-CR1 | 13; //使能发送器USART1-CR1 | 12; //使能接收器USART1-CR1 | 113; //使能串口}/******************************** 函数功能修改printf底层代码 注意不可更改 魔术棒Target---Use MicroLIB *********************************/ int fputc(int data,FILE* file) {while(!(USART1-SR 16)){}USART1-DR data; //清标志位发送数据return data; }/************************************ 函数功能串口USART1传输字符串 函数参数str字符串 *************************************/ void Prin_Str(uint8_t *str) {uint8_t ch;uint32_t i 0;while(str[i] ! \0){ch str[i];while(!(USART1-SR 16)){}USART1-DR ch;i;} }“KEY.c” #include KEY.h #include delay.h /***************************************** 函数功能按键初始化 函数接口KEY1--PA0--浮空/下拉输入 ******************************************/ void KEY_Init(void) {RCC-AHB1ENR | 10; //按键PA0时钟使能GPIOA-MODER ~(30*2); //清零输入模式GPIOA-PUPDR ~(30*2); //清零浮空GPIOA-PUPDR | 20*2; //下拉 } /***************************************** 函数功能按键消抖 函数接口KEY1--PA0--浮空/下拉输出 返回参数返回0没有按下返回1按键按下 ******************************************/ uint8_t KEY_Scan(void){ static uint8_t flag 0; //0:按键未按下1:按键已按下if((flag 0) (GPIOA-IDR 10)) //判断按键是否按下IDR第0位为1时按下{flag 1;delay(500);if(GPIOA-IDR 10){return 1;}}else if((flag1) !(GPIOA-IDR 10)) //松手检测{flag 0; //按键松手}return 0; }#if 0 uint8_t KEY_Scan2(void) {static uint8_t flag 0;if((flag 0)(GPIOA-IDR 10 || GPIOA-IDR 11)){delay(1000);if(GPIOA-IDR 10){return 1;}if(GPIOA-IDR 11){return 2;}}else if((flag 1) (!(GPIOA-IDR 10) || !(GPIOA-IDR 11))){flag 0;}return 0; }uint8_t KEY_Scan3(void) {static uint8_t flag 0;if((flag 0)(KEY11 || KEY2 1)){delay(1000);if(KEY11){return 1;}if(KEY21){return 2;}}else if((flag 1) (KEY10 || KEY20)){flag 0;}return 0; }#endif “main.c” #include stm32f4xx.h // Device header #include LED.h #include KEY.h #include delay.h #include time.h #include usart.h #include stdio.h#define STR qwertyuiop //串口1传输字符串int main(void) {uint8_t key;LED_Init();KEY_Init();USART1_Init(115200);printf(按下KEY1发送数据\r\n);while(1){ key KEY_Scan();if(key 1){Prin_Str(STR);LED5 !LED5;printf(按下KEY1发送数据\r\n);}} }
http://www.pierceye.com/news/464739/

相关文章:

  • 做自行车网站应该注意什么个人介绍网页设计模板
  • 邢台网站建设免费做网站排名上海开发app
  • 沈阳网站建设设计企业网站设计与管理系统
  • 婚纱照网站制作梁山网站建设价格
  • 做现货去哪些网站营销好呢网站 服务报价
  • 网站建设渠道做网站前端和平面配合
  • 北京交友最好的网站建设wordpress 移动支付宝
  • 2015百度推广网站遭到攻击非遗网页设计作品欣赏
  • 网站空间需要多大网站推荐几个免费的
  • 做一个网站花多少钱建行系统
  • 滁州市住房城乡建设部网站wordpress title背景
  • 餐饮手机微网站怎么做wordpress 多语言建站
  • 企业信息系统案例东昌府聊城网站优化
  • 做美食直播哪个网站好php网站开发数据列表排重
  • 网站建设 职责网站分站加盟
  • 单页网站产品手机网站免费生成
  • 无锡电子商务网站建设公司德国网站的后缀名
  • 服务器做视频网站赣州企业做网站
  • 如何看出网站用dede做的网站百度快照
  • 做网站很难吗五种新型营销方式
  • 个人网站搭建模拟感想江西企业网站建设哪家好
  • 长春企业网站建设网站制作公司相关工作
  • 免费课程网站有哪些兼职网站项目建设报告
  • 建立网站免费dedecms网站地图制作
  • 网页设计公司网站制作做网站最主要是那个一类商标
  • 卫生局网站建设方案网站架构设计英文翻译
  • 学做衣服网站有哪些智能开发平台软件
  • wordpress 下载站插件wordpress清楚所有评论
  • 公司网站建设工作计划网站设置受信任
  • 网站如何做实名验证码深圳企业网站推广