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

美容院门户网站开发永久 终身 云服务器

美容院门户网站开发,永久 终身 云服务器,打开网站说建设中是什么问题,渭南网站建设seo1.寄存器轮询_收发字符串 通过寄存器轮询方式实现了收发单个字节之后,我们趁热打铁,争上游,进阶到字符串。字符串就是多个字符。很明显可以循环收发单个字节实现。 然后就是接收字符串。如果接受单个字符的函数放在while里,它也可…

1.寄存器轮询_收发字符串

通过寄存器轮询方式实现了收发单个字节之后,我们趁热打铁,争上游,进阶到字符串。字符串就是多个字符。很明显可以循环收发单个字节实现。

然后就是接收字符串。如果接受单个字符的函数放在while里,它也可以实现一个一个的接收字符串,在一定时间戳下,效果等同。

然后我们要想想如何整合,写成一个函数。

2.问题解答,状态位清零

我们的编程方式,一个是寄存器写法,一个是hal库写法。还有的就是实现思路。

//发送一个字符
void USART_SendChar(uint8_t ch)
{//判断TDR是否为空,必须等待TDR为空才能写入数据,也就是继续发送while((USART1->SR & USART_SR_TXE)==0){}//将要发送的数据写入TDRUSART1->DR = ch;
}

初始的时候,TDR的存储寄存器肯定为空

关于状态位清零,TXE和RXNE都可以自动清零。

只要发数据,就自动清零。

RXNE也是一样,只要读RDR,就会清零。

3.串口通讯 寄存器中断方式

复制上一个工程文件,把改删除的删掉。

主要配置中断管理NVIC

中断服务函数

main.c

#include "usart.h"
#include "delay.h"
#include <string.h>
//定义接收缓冲区和接收数据长度
uint8_t buff[100];
uint8_t size;
int main(void)
{//1.初始化USART_Init();//发送单个字符USART_SendChar('A');USART_SendChar('\n');//发送字符串uint8_t str[]="Hello World!\n";USART_SendString(str,strlen((char *)str));while(1){}}

usart.c

#include "usart.h"//初始化
void USART_Init(void)
{//开启时钟RCC->APB2ENR |= RCC_APB2ENR_USART1EN;RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;//GPIO工作模式// PA9:TX 复用推挽输出,CNF=10,MODE=11GPIOA->CRH |= GPIO_CRH_MODE9;GPIOA->CRH |= GPIO_CRH_CNF9_1;GPIOA->CRH &= ~GPIO_CRH_CNF9_0;// PA10:RX 浮空输入,CNF=01,MODE=00GPIOA->CRH &= ~GPIO_CRH_MODE10;GPIOA->CRH &= ~GPIO_CRH_CNF10_1;GPIOA->CRH |= GPIO_CRH_CNF10_0;//串口模块设置//设置波特率 115200USART1->BRR = 0x271;//使能串口和收发模块USART1->CR1 |= USART_CR1_UE;USART1->CR1 |= (USART_CR1_TE|USART_CR1_RE);//配置数据帧格式USART1->CR1 &=~ USART_CR1_M;   //长度为8位的数据,没有校验位USART1->CR1 &=~ USART_CR1_PCE;  //无校验,不使用校验位USART1->CR2 &=~ USART_CR2_STOP;  //1位停止位//使能串口接收中断USART1->CR1 |= USART_CR1_RXNEIE;USART1->CR1 |= USART_CR1_IDLEIE;//配置NVICNVIC_SetPriorityGrouping(3);NVIC_SetPriority (USART1_IRQn,2);NVIC_EnableIRQ(USART1_IRQn);}//发送一个字符
void USART_SendChar(uint8_t ch)
{//判断TDR是否为空,必须等待TDR为空才能写入数据,也就是继续发送while((USART1->SR & USART_SR_TXE)==0){}//将要发送的数据写入TDRUSART1->DR = ch;
}//发送字符串,数组可以用指针表示,形参就是数组和字长
void USART_SendString(char *str,uint8_t size)
{uint8_t i = 0;for ( i = 0; i < size; i++){USART_SendChar(str[i]);}}//引入外部变量
extern uint8_t buff[100];
extern uint8_t size;//中断服务程序
void USART1_IRQHandler(void)
{//判断是RXNE=1还是IDLE=1if (USART1->SR & USART_SR_RXNE){//如果RXNE=1,表示接收到一个字符
buff[size]=USART1->DR;
size++;}else if (USART1->SR & USART_SR_IDLE){USART1->DR;//如果IDLE=1,表示检测到空闲帧,字符串接收完毕USART_SendString(buff,size);size=0;}}

usart.h

#ifndef __USART_H
#define __USART_H
#include "string.h"
#include "stm32f10x.h"
//初始化
void USART_Init(void);//发送一个字符
void USART_SendChar(uint8_t ch);//发送一个字符串,数组可以用指针表示,形参就是数组和字长
void USART_SendString(char *str,uint8_t size);#endif

 

我们可以将接收字符串的标志位在外面定义出来。

 

4.串口案例一串口通讯_hal库轮询方式

我们有usart1配置。

我们反正还得需要配,这个时候我们可以不管他,直接去左边框栏中点点点。图形化配置的精髓就是方便。

还是调用hal库简单。

轮询方式使用效率不是很高,中断方式才高。

5.HAL库中断方式—定长数据接收

记住USART1用异步模式,要打开中断实现

中断方式要和回调函数结合。

接收定长数据,会和之前接收的数据结合分析

6.HAL库中断方式--变长数据接收

接收变长数据,size是可接收的字长上限。

她的回调不一样,是下面这个。在函数面前加void,我忘了加,编译出错。

先检查是什么模块

7.重定向printf—寄存器方式

用printf输出调试信息,打印到屏幕,没有屏幕也可重定向printf,把数据打印到串口,从而在电脑端接收调试信息,这是一种有效调试手段。

printf大法对任何语言都是有用的。

printf的底层函数:fputc

把字符一个个发到控制台文件里。 

重写也在usart.c里,记得引入<stdio.h>

8.重定向——hal

usart.c里

在main函数来随便打印。

http://www.dtcms.com/a/460082.html

相关文章:

  • 郑州网站设计收费全世界足球排名前十位
  • 做视频网站需要什么手续常州公司网站建设多少钱
  • 门户app网站建设多少钱长春建站方法
  • 汕头网站建设只需要800潍坊网站制作最低价格
  • 商城网站建设价格成都有名的软件开发公司
  • 创办一个网站的费用网站建设可行性方案模板
  • 昌平知名的网站制作建设报价做选择网站
  • 个人网站开发技术如何创建微信小程序
  • 公司手机网站制作广州软件园软件开发公司
  • 如何修改网站域名济南房产查询网官网
  • 网页设计制作一个餐饮网站社交网站开发语言
  • 公司手机网站建设价格环影视界免费版wordpress主题
  • 能免费做婚礼邀请函的网站免费crm网站下载
  • 青岛商家都上什么网站个性化网站成功的案例
  • 什么是功能型网站平面设计专业课程有哪些
  • 麻涌仿做网站网站搜索要怎么做
  • 做网站外包工作怎么样黄骅港港务集团
  • 手机能用的网站mip网站案例
  • 网站开发费用摊销年限天津网站备案
  • 合肥网站seo优化排名wordpress怎么上传视频
  • 校友会网站建设方案怎么做软件程序
  • 仿唧唧帝笑话门户网站源码带多条采集规则 织梦搞笑图片视频模板住房和城建设网站首页
  • 国外产品网站wordpress 新建文章
  • 做黑彩网站能赚钱吗网站设置flash
  • 做网站签到挣钱吗免费推广平台有哪些?
  • 局域网怎么建设网站北京有限公司公章图片
  • 做暧暖ox网站杭州模板网站
  • 商洛网站开发公司网站开发的ie兼容做到9
  • 沈阳网站设计开发公司wordpress 免费好用主题
  • 网站每年都要备案吗青海省住房和建设厅网站