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

Linux学习笔记6-串口应用

到现在为止都是在开发板上运行的裸机程序,相当于之前学习STM32单片机时走过的路,还没有真正进入到核心的驱动开发部分,但这都是基础,所以慢慢来不着急。
接下来进入串口通信的学习,和GPIO一样,也是和单片机对比着来看。
先看下使用CubeMX设置初始化串口后自动生成的代码,应该都很熟悉了。

void MX_USART1_UART_Init(void)
{huart1.Instance = USART1;huart1.Init.BaudRate = 115200;huart1.Init.WordLength = UART_WORDLENGTH_8B;huart1.Init.StopBits = UART_STOPBITS_1;huart1.Init.Parity = UART_PARITY_NONE;huart1.Init.Mode = UART_MODE_TX_RX;huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart1.Init.OverSampling = UART_OVERSAMPLING_16;if (HAL_UART_Init(&huart1) != HAL_OK){Error_Handler();}
}void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
{GPIO_InitTypeDef GPIO_InitStruct = {0};if(uartHandle->Instance==USART1){__HAL_RCC_USART1_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();/**USART1 GPIO ConfigurationPA8     ------> USART1_CKPA9     ------> USART1_TXPA10     ------> USART1_RX*/GPIO_InitStruct.Pin = GPIO_PIN_8|USART1_TX_Pin;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);GPIO_InitStruct.Pin = USART1_RX_Pin;GPIO_InitStruct.Mode = GPIO_MODE_INPUT;GPIO_InitStruct.Pull = GPIO_NOPULL;HAL_GPIO_Init(USART1_RX_GPIO_Port, &GPIO_InitStruct);/* USART1 interrupt Init */HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);HAL_NVIC_EnableIRQ(USART1_IRQn);}
}

使用串口收发数据时使用的函数是HAL_UART_Transmit()HAL_UART_Receive()或者HAL_UART_Receive_IT()等,或者直接改写printf()scanf()来直接打印或接收串口数据。
I.MX6UL的串口操作大同小异,和之前的GPIO类似,也是需要第三方的编写函数来操作各个串口相关的寄存器来达到想要的功能。有以下4步:

  1. 设置UART的时钟源,设置寄存器CCM_CSCDR1
  2. 初始化UART,包括波特率,奇偶校验位、停止位、数据位,设置寄存器UART1_UCR1~UCR3
  3. 使能相应的UART,设置寄存器UART1_UCR1
  4. 编写UART的数据收发函数,操作寄存器UART1_UTXD

但其实想想就知道,编写收发函数的这种串口读写的方法太繁琐了,最开始helloworld的时候不是直接可以用printf("Hello World!\n");吗?要注意,这个是直接打在屏幕上,而我们现在是要把可执行文件烧写到开发板上,通过开发板的串口和PC连接后发送和接收数据,不是一个层面的事情。当然,我们还是可以用printf()scanf(),但是一定需要初始化串口。本人最主要是想学习Linux的应用,比较浮躁,不愿意投入时间精力去看寄存器的操作,所以在这一阶段利用Uboot移植的stdio文件夹,再使用正点原子写好的相关驱动,直接放到工程文件夹里,就可以使用串口进行数据的读写了。
在main.c里加入这段

char a[20];
int b;
printf("please input your name and your age, use space between them:");
scanf("%s %d, &a, &b);
printf("\r\n%s is the most handsome one in the age of %d", a, b);

编译链接烧写后通过MobaXTerm或其他工具即可完成串口数据的测试,可以打印并接收,完成了预想的功能。

(未完待续)

相关文章:

  • opencv-图像平滑
  • 【leetcode每日一题】565数组嵌套
  • 蓝桥杯-01简介
  • 互联网上门洗鞋店小程序
  • TOD和PPS精确时间同步技术
  • 在 Linux 中重命名文件和目录
  • css之选择第一个或最后一个元素、第n个标签、选择偶数或奇数标签、选择最后n个标签、等差数列标签的选择、first、last、nth、child
  • 【密码学引论】Hash密码
  • 简易版扫雷+代码分析
  • LuatOS-SOC接口文档(air780E)--pwm - PWM模块
  • Elasticsearch 聚合查询(Aggregation)详解
  • k8s中pod的hostport端口突然无法访问故障处理
  • ArcGIS中如何建立土地利用规划数据库
  • 【算法心得】When data range not large, try Bucket sort
  • 【Linux基础】Linux常见指令总结及周边小知识
  • CentOS 7 修改主机名
  • k个最大的数及变种小结
  • Mybatis初体验
  • ReactNative开发常用的三方模块
  • React组件设计模式(一)
  • socket.io+express实现聊天室的思考(三)
  • 关于springcloud Gateway中的限流
  • 前端面试之CSS3新特性
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 区块链技术特点之去中心化特性
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 算法系列——算法入门之递归分而治之思想的实现
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • postgresql行列转换函数
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • #HarmonyOS:软件安装window和mac预览Hello World
  • (1)(1.11) SiK Radio v2(一)
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (70min)字节暑假实习二面(已挂)
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (vue)页面文件上传获取:action地址
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (定时器/计数器)中断系统(详解与使用)
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (五)Python 垃圾回收机制
  • (一)u-boot-nand.bin的下载
  • (译)2019年前端性能优化清单 — 下篇
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • ./configure,make,make install的作用(转)
  • .net FrameWork简介,数组,枚举
  • .Net Web窗口页属性
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • @ModelAttribute注解使用
  • @reference注解_Dubbo配置参考手册之dubbo:reference
  • @RequestMapping处理请求异常