S5P4418裸机开发(六):串口初试,简单回显(轮询模式)
手册上对S5P4418串口的概述
- UART0 ~ 4,五个串口
- 可编程FIOF
- UART0,1,2支持DMA
- IrDA(红外数据组织)SIR ENDEC
- …
UART配置基本流程
- TX引脚配置为输出模式,RX引脚配置为输入模式
- 配置UART时钟
- 配置波特率,数据位,停止位,校验位等
- 使能
UART0为例,GPIO配置
- TX GPIOD18 AD19 Function1
- RX GPIOD14 AE19 Function1
时钟
- UART时钟要求:
相关寄存器:
UARTCLKENB
时钟生成使能UARTCLKGEN0L
反转输出,PLL选择,分频设置,时钟输出使能
这里使用PLL0来生成UART时钟,PLL0默认是550MHz,分频系数设置(55 - 1),生成的UART时钟为10MHz。
波特率
波特率配置规则
分整数部分BRDI,小数部分BRDF
UARTCLK / (16 * BaudRate) = BRDI + BRDF相关寄存器:
UARTIBRD[15:0] = BRDI
UARTFBRD[5:0] = int(BRDF * 2n + 0.5)
n等于UARTFBRD寄存器位数,即32- 115200的波特率,UARTIBRD[15:0] = int(10MHz / (16 * 115200)) = 5; UARTFBRD[5:0] = int(0.4253472 * 2 * 32 + 0.5) = 27;
数据位,停止位,校验位
UARTLCR_H[6:5] - WLEN
数据位长度UARTLCR_H[4] - FEN
FIFO使能位UARTLCR_H[3] - STP2
停止位,0表示1位,1表示2位停止位UARTLCR_H[1] - PWN
校验位使能
使能
UARTCR[0] - UARTEN
串口总使能UARTCR[8] - TXE
发送使能UARTCR[9] - RXE
接收使能
标志位
UARTFR[3] - BUSY
当窗口正在发送数据时置位TXFF TXFE
发送FIFO满,空RXFF RXFE
接收FIFO满,空- 轮询模式下,通过读取这几位来判断是否有数据要接收,是否能发送数据;
数据寄存器
+ 发送数据时写UARTDR[7:0]
+ 接收数据时读UARTDR[7:0]
代码
// uart.c
/** UART0* TX GPIOD18 AD19 function1* RX GPIOD14 AE19 function1*/#include "../gpio.h"
#include "uart.h"void uart0_init(int baud){GPIODALTFN0 &= ~((3 << 28));GPIODALTFN1 &= ~((3 << 4));GPIODOUTENB &= ~((1 << 18) | (1 << 14));GPIODALTFN0 |= ((1 << 28));GPIODALTFN1 |= ((1 << 4));GPIODOUTENB |= ((1 << 18));// 设置UART0时钟UARTCLKENB |= (1 << 2);UARTCLKGEN0L &= ~((3 << 2) | (0xFF << 5));UARTCLKGEN0L |= ((55 - 1) << 5);// UARTCLKGEN0L |= ((200 - 1) << 5);// 配置波特率 115200UARTIBRD &= ~0xFFFF;UARTIBRD |= 5;UARTFBRD &= ~0x3F;UARTFBRD |= 27;// 8N1UARTLCR_H &= ~((3 << 5) | (0x1F << 0));UARTLCR_H |= ((3 << 5));// UART TX RX使能UARTCR |= ((1 << 0) | (1 << 8) | (1 << 9));
}char getc(){// if((UARTFR >> 6) & 1){// rec = UARTDR & 0xFF;// }while((UARTFR & (1 << 6)) == 0);return UARTDR;
}void putc(char c){while(UARTFR & (1 << 3));UARTDR = c;
}
//main.cwhile(1){ch = getc();if(ch == '\n'){putc('\r');}putc(ch);
}
码云_4_uart
时钟问题:
PLLSETREG0 0x100D1302 -> PMS = 3 275 2 = 550MHz
S5P4418裸机开发(六):串口初试,简单回显(轮询模式)相关推荐
- STM32CUBEMX开发GD32F303(10)----双ADC轮询模式扫描多个通道
概述 本章STM32CUBEMX配置STM32F103,并且在GD32F303中进行开发,同时通过GD32303C_START开发板内进行验证.需要GD样片的可以加Q_QUN申请:615061293. ...
- 串口 单片机 文件_STM32物联网实战项目 HAL裸机开发09 串口打印
就喜欢你关注我- HAL裸机开发09 - 串口打印 综合信息1.获取开发工具 微信公众号后台发送消息 - 工具2.获取开发板 淘宝搜索店铺 - 硬件家园3.快速了解平台 ...
- GD32F303固件库开发(10)----双ADC轮询模式扫描多个通道
GD32F303固件库开发.10----双ADC轮询模式扫描多个通道 概述 视频教学 csdn课程 样品申请 硬件准备 keil配置 使能串口 串口重定向 ADC通道设置 ADC0初始化 ADC0配置 ...
- DW1000开发笔记(五)DW1000使用轮询方式接收数据
系列文章 DW1000开发笔记(一)DW1000芯片概览 DW1000开发笔记(二)使用STM32硬件SPI+STM32cubeMX+HAL库测试DW1000通信 DW1000开发笔记(三)基于STM ...
- 实现简单的多任务轮询(C语言)
实现简单的多任务轮询(C语言) 前言 总体思路 实现过程 调用示例 完整代码 前言 好久没有做MCU的项目了,最近因为工作需要接手一个STM32的项目,因为项目要求比较简单,也就没有用到操作系统,而是 ...
- Linux裸机开发|UART串口通信
UART串口通信 不管是单片机开发还是嵌入式Linux开发,串口都是最常用到的外设.可以通过串口将开发板与电脑相连,然后在电脑上通过串口调试助手来调试程序.还有很多模块,比如蓝牙.GPS.GPRS等都 ...
- android list嵌套list,Android开发日常-listVIiew嵌套webView回显阅读位置
详情页布局结构 需求是回显webview展示网页的阅读位置 方案1: 使用webview.getScrollY()获取滑动到的位置,用setScrollY()回显设置, 但是两个方法都出现了问题,ge ...
- 实现一个简单的长轮询
分析一下长轮询的实现方式 现在各大中间件都使用了长轮询的数据交互方式,目前比较流行的例如Nacos的配置中心,RocketMQ Pull(拉模式)消息等,它们都是采用了长轮询方的式实现.就例如Naco ...
- STM32串口用中断还是用轮询
1.从轮询到中断 很多同学都不喜欢用中断,而偏爱用轮询的操作方式. 这是不是和我们的天性有关呢?每个人都喜欢一切尽在掌握中,肯定都不喜欢被打断.我们常常都有这样的经验:正在跟别人说一件事,然后突然有个 ...
- S5P4418裸机开发(十二):IRQ (按键中断) 串口中断
S5P4418 64个中断源,按键的GPIO口是GPIOB28-30,中断号为54: Interrupt Controller相关寄存器 寄存器 功能 VICIRQSTATUS R,相关位为1表示该I ...
最新文章
- devServer proxy跨域 设置代理 proxy
- 设置Distribution clean up 每次删除Command的数量
- 下载股票代码的历史数据并打包成csv
- Linux select TCP并发服务器与客户端编程
- CodeForces - 1426F Number of Subsequences(dp)
- 系统优化-----sysctl.conf文件内核设置参数详解
- 物联网企业该如何与华为云合作,这份FAQ值得一看
- Android系统---- 全面屏(18:9屏幕)适配指南
- 都说比特币无价值,涨得不合理;但你知道比特币最大的用途吗?
- swagger测试上传图片报错
- IOS技术分享| 你画我猜小游戏快速实现
- pcm5102a解码芯片音质评测_聊一款售价两万九千元的国产解码器——声韵织女星AURALiC VEGA G1...
- 2019黑马python吾爱_最新Python黑马头条推荐系统项目视频教程
- ES集群状态检查报错:master_not_discovered_exception 503错误
- js之splice 和 slice
- win7下通过easyBCD引导安装Ubuntu14.04(补充完善版)
- MATLAB中的zigzag,ZIGZAG扫描的MATLAB实现
- Hexo+Github: 博客网站搭建完全教程(看这篇就够了)
- 单片机C51使用一个按键控制继电器开关通断
- 擅自修改金蝶k 3服务器密码,金蝶k3登陆常见问题.docx