FM33LC0xx复旦微手册UART学习

本文详细介绍了如何在嵌入式系统中使用UART0实现115200波特率的全双工通信,包括配置数据帧格式、波特率生成、时钟结构、中断处理以及重定向printf输出。重点涉及GPIO初始化、UART结构和CMU时钟管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UART

目标:实现使用串口0完成数据收发,波特率115200、数据长度8bits,无校验位,1停止位。

1.UART串行通信模块特点:

  1. 波特率软件可配置4路独立通道(UART0, UART1, UART4, UART5)
  2. 全双工通信口
  3. UART具有数据接收完成/接收错误中断,并提示错误类型
  4. 可配置数据长度,支持6、 7、 8、 9bits
  5. 可配置的停止位-支持1个停止位或2个停止位
  6. 可配置为红外调制输出功能,且载波频率可设置,及载波占空比可设置
  7. 支持DMA
  8. 支持接收超时机制

2.结构框图

3.引脚定义

RX和TX都要配置成数字外设功能。

4.数据帧格式配置

注:

目标帧结构:1+8+0+1;

寄存器PDSEL:01;PARITY:00;

5.时钟结构

UART0 和 UART1 采用了双时钟结构:

  1. 总线寄存器时钟用 pclk 表示,来源于 APBCLK。当 CPU 或者 DMA 需要访问 UART 内部寄存器时,必须使能 pclk
  2.  数据收发时钟用 uclk 表示,除了可以来源于 APBCLK,还可以来源于 RCHF、 SYSCLK、 RCMF,能够独立于 APBCLK 工作。必须使能 uclk 才能进行数据收发。

pclk用于配置,uclk用于传输,都要使能。

Pclk 和 uclk 的控制都在 CMU 模块内完成,进行 UART 通信前必须正确配置相应的 CMU 控制寄存器

CMU:时钟管理单元。

由于 UART 对输入信号进行 16 倍过采样,要求 SPBRG 配置不能小于 16,即 UART 工作时钟必须至少是波特率的 16 倍。

SPBRG:波特率发生寄存器

6.软件实现步骤

  1. 串口初始化
  2. 中断函数编写
  3. 串口助手测试通信

这部分验证之后再写

7.串口重定向

到手之后先配置了留的调试串口,UART0

进行串口0初始化之后加上重定向的代码即可实现printf打印数据

重定向部分放在main.c开头,或者main.h中。

注意我这里的初始化的奇偶校验为EVEN,波特率为115200.

void UART0_Init(void)
{

    FL_GPIO_InitTypeDef    GPIO_InitStruct;

    FL_UART_InitTypeDef    defaultInitStruct;

    GPIO_InitStruct.pin = FL_GPIO_PIN_13;
    GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
    GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStruct.pull = FL_ENABLE;
    GPIO_InitStruct.remapPin = FL_DISABLE;

    FL_GPIO_Init( GPIOA, &GPIO_InitStruct );

    GPIO_InitStruct.pin = FL_GPIO_PIN_14;
    GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
    GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStruct.pull = FL_DISABLE;
    GPIO_InitStruct.remapPin = FL_DISABLE;

    FL_GPIO_Init( GPIOA, &GPIO_InitStruct );

    defaultInitStruct.clockSrc = FL_RCC_UART0_CLK_SOURCE_APB1CLK;
    defaultInitStruct.baudRate = 115200;
    defaultInitStruct.dataWidth = FL_UART_DATA_WIDTH_8B;
    defaultInitStruct.stopBits = FL_UART_STOP_BIT_WIDTH_1B;
    defaultInitStruct.parity = FL_UART_PARITY_EVEN;
    defaultInitStruct.transferDirection = FL_UART_DIRECTION_TX_RX;

    FL_UART_Init(UART0,&defaultInitStruct );
    
}
#if 1
#pragma import(__use_no_semihosting)                          
struct __FILE 
{ 
    int handle; 
};
FILE __stdout;       

void _sys_exit(int x) 
{ 
    x = x;
} 

int fputc(int ch, FILE *f)
{
	UART0->TXBUF = ch;
    while (!(UART0->ISR & (0x1 << 0)));
    UART0->ISR |= (0x1 << 0);
    
    return ch;
}
#endif
while(1)
{
	printf("111111111\n");
	FL_DelayMs(500);
}

@文章主要内容来自芯片产品说明书

FM33G0xx的主要特性如下:  宽电压范围: 1.8~5.5V  工作温度范围: -40℃~+85℃  处理器内核  ARM Cortex-M0+  支持用户/特权模式  支持中断向量表重定向(VTOR)  最高40MHz主频  SWD调试接口  低功耗技术平台  典型运行功耗180uA/MHz  32KHz下LPRUN功耗: 15uA  Sleep模式下带LCD显示: 6uA  DeepSleep模式, RTC走时+24KB RAM保持+CPU内核保持: 1.2uA  RTC Backup模式, RTC走时+512字节备份寄存器, 0.9uA  存储器  128/256KB Flash空间  Flash擦写寿命: >20,000次  Flash数据保存时间: 10年@85℃  用户代码保护  24KB RAM空间  最大支持73个GPIO,最多24个外部引脚中断, 最多8个异步唤醒引脚  丰富的模拟外设  高可靠、可配置BOR电路(支持4级可编程下电复位阈值)  超低功耗PDR电路(支持4级可编程下电复位阈值)  可编程电源监测模块(SVD)  2x低功耗模拟比较器  11-bit低功耗∑-△ADC,最大支持9个外部通道  高精度温度传感器,精度优于+/-2℃  通信接口  UART*6  7816智能卡接口*2  SPI*3,主从模式  I2C*1, 主机400K  7通道外设DMA  可编程CRC校验模块  定时资源  8-bit基本定时器*4  16-bit扩展定时器*4  16-bit通用定时器*1  24-bit Systick*1  16-bit低功耗定时器*1,可在休眠模式下工作  带窗口的CPU看门狗定时器*1  系统看门狗定时器*1  低功耗实时时钟日历(RTCC),带有数字调校功能, 最高调校精度+/-0.06ppm
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值