总结的还是非常到位的
接下来讲解一下这款单片机的串口。
EFM8BB52这款单片机设计有两个串口,UART0(P0.4&P0.5)和UART1(P2.2&P2.3),除了默认输出引脚外,还可以通过CLU0,1,2路由到其它输出IO口,可以说是灵活便捷。串口具体的初始化设置依然是参照51单片机的经典设计,不过因为功能有所升级,UART1设置要复杂的多的多,鉴于时间有限,精力不足,只能给大家介绍下UART0了。后续如果更多的开发需求,大家可以自行好好研究一下UART1设计的精妙之处,到时候不妨与我等志同道和之士分享一番。
上面是芯片手册里面关于UART0串口的介绍,已经为大家翻译成了中文,放心下载阅览。咋一看UART0的介绍内容还不少,为了避免大家看着犯头痛,我给大家总结一些有用的点:
1.UART使用两个信号(TX和RX)和一个预定的固定波特率来提供与其他设备的异步通信。
UART模块提供以下特性:
l 异步传输和接收。
l 波特率高达syclk /2(发送)或syclk /8(接收)。
l 8位或9位数据。
l 自动启动和停止。
l 单字节FIFO发送和接收
2.UART0波特率由定时器1生成,8位自动加载。将TX和RX定时器溢出都除以2,以生成TX和RX波特率。
定时器1应该被配置为8位自动重新加载模式(模式2)。定时器1的重新加载值和预分频器应该被设置,以使溢出发生在期望的UART0波特率的两倍。UART0波特率为定时器1溢出率的一半。
3.要启用数据接收,固件应该将REN位写入1。
4.在UART0中断启用的情况下,UART0中断标志RI(或TI)不会被硬件清除。它们必须由软件手动清除,允许软件确定UART0中断的原因(发送完成或接收完成)。
5.默认情况下,UART的RX0输入是通过crossbar路由的。也可以将RX输入路由到CLU0的输出,CLU1或CLU2。该函数由寄存器UART0PCF中的RXSEL字段选择。
大致浏览以上关键信息后,我们终于知道要想是UART0串口工作,除了设置P0.4,P0.5 IO口相关寄存器以外还需要设置以下几个寄存器:
1.CLKSEL 系统时钟选择寄存器
2.CKCON0 系统时钟控制设置寄存器
3.TMOD 定时器计数器模式设置寄存器
4.SCON0 串口控制设置寄存器
是不是感觉超简单呢!不急不急,还漏了东西。既然涉及串口收发,那么波特率的计算与定时器初始值得设定必不可少了。为了简化计算,我已经把分频器,倍频功能都舍弃了,定时器(必须选用T1)选用了工作模式2(8位计数且自动重装初值)。然后根据有关波特率资料整理出来了下面这个公式:
波特率了解后接下来我们看看涉及的相关特殊寄存器详细介绍图表吧:
由于这款开发板集成有J-LINK调试芯片,而调试芯片也自然连接了在了UART0串口上面,所以我们不需要外接任何元器件即可直接进行串口通信调试,简直是棒极了有没有!!下面呈上串口调试工具串口超级终端和UART0调试程序:
超级终端_hyper_terminal_latest(中文).zip
EFM8BB52_UART.zip 串口传输模式为中断模式
注意:程序中TH0=0x96,那么通过波特率计算公式得出波特率为115200
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【笔记】生成报错synthdesignERROR被打赏50分 | |
【STM32H7S78-DK评测】LTDC+DMA2D驱动RGBLCD屏幕被打赏50分 | |
【STM32H7S78-DK评测】Coremark基准测试被打赏50分 | |
【STM32H7S78-DK评测】浮点数计算性能测试被打赏50分 | |
【STM32H7S78-DK评测】Execute in place(XIP)模式学习笔记被打赏50分 | |
每周了解几个硬件知识+buckboost电路(五)被打赏10分 | |
【换取逻辑分析仪】RA8 PMU 模块功能寄存器功能说明被打赏20分 | |
野火启明6M5适配SPI被打赏20分 | |
NUCLEO-U083RC学习历程2-串口输出测试被打赏20分 | |
【笔记】STM32CUBEIDE的Noruletomaketarget编译问题被打赏50分 |