打印
[其它应用]

中颖串口案例

[复制链接]
2283|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
功能:使用 UART1 在 PB8/TXD1、PB9/RXD1 上进行串口收发,上位机通过 UART1 连接 SH32F9B00,
上位机发送 1 字节,SH32F9B00 接收后把该字节加 0x33 再反馈给上位机,波特率 9600Bps,8/1/1/none 模
式。
说明:
(1)复用配置时先配置 I/O 口,再开启数字外设功能,如果先开 RXD,有可能外部 I/O 电平变化
导致接收错误起始位。
(2)此例中 RXD1 映射到 PA2 主要为示范 SWJ 接口复用为数字外设接口功能。
(3)RXD1 初始化为输入且内部上拉、TXD1 初始化为输出高电平。

#include <SH32F9B00.H>
char WaitUartTransmit(UART_TypeDef* Uart, unsigned char ch )
{
while(!Uart->FR.BIT.TI); // 等待发送完成
Uart->TDR = ch; // 发送数据,TI 为自动清
}
char WaitUartReceive(UART_TypeDef* Uart)
{
while(!Uart->FR.BIT.RI); // 等待接收完成
Uart->FR.BIT.RIC = 1; // RI 人工清,定义为写 1 清
return(Uart->RDR); // 要求先清 RI,再返回数据,避免阻塞接收
}

void main(void)
{
unsigned char rcv_byte;
RCC_Config(); // 配置使用 PLL 作为系统时钟,HCLK=120MHz,PCLK0=HCLK/4
NVIC_Config(); // 如果需要配置中断,此例未用到中断
GPIO_Config(); // 如果需要配置 I/O,此例保持默认输入悬空
RCC->RCCLOCK = 0x33CC; // unlock RCC config
APB0_CFG->RCCLOCK = 0x33CC; // 解锁 APB0_CFG 寄存器
RCC->AHBENR.BIT.GPIOEN = 1; // 打开 GPIO 模块时钟
RCC->AHBENR.BIT.SYSCFGEN = 1; // 打开 SYSCFG 模块时钟(SWJ 复用)
APB0_CFG->APB0ENR.BIT.UART1EN = 1; // 打开 UART1 时钟
RCC->RCCLOCK = 0x0; // lock RCC config
GPIOB_CFG->LCKR.V32 = 0x5AA50000; // unlock PB config
GPIOB_IOD->MODER |= 0x0100; // set PB8 output
GPIOB_IOD->MODER &= 0xFDFF; // set PB9 input (default)
GPIOB_CFG->PUPDR.BIT.PUPDR9 = 1; // set PB9 pull-up, 01b: pull-up
GPIOB_IOD->ODR |= 0x0100; // set PB8 = 1
SYSCFG->SAFR.V32 = 0x5AA50008; // SWJ 只使用 SWD 接口,释放 PA2 口
GPIOB_CFG->AFRH.BIT.AFR8 = 7; // PB8 映射到 TXD1
GPIOB_CFG->AFRH.BIT.AFR9 = 7; // PB9 映射到 RXD1
GPIOB_CFG->LCKR.V32 = 0x5AA5FFFF; // lock PE config
UART1->BRT.BIT.SBRT = 194; // 设置波特率为 9.6KBps,30M/16/9.6K=195.3125
UART1->BRT.BIT.BFINE = 5; // 0.3125*16=5
UART1->CR.BIT.SM = 1; // type 1: 8/1/1/none, variable baud rate
UART1->CR.BIT.SBRTEN = 1; // enable baud rate generation
UART1->CR.BIT.TEN = 1; // enable txd
UART1->CR.BIT.REN = 1; // enable rxd
while(1) // main loop
{
rcv_byte = WaitUartReceive(UART1); // Uart 接收
WaitUartTransmit(UART1,rcv_byte+0x33); // Uart 发送
}
}




使用特权

评论回复
沙发
OKAKAKO| | 2023-11-12 19:15 | 只看该作者
串口配置很关键

使用特权

评论回复
板凳
szt1993| | 2023-11-12 20:35 | 只看该作者
复用配置时先配置 I/O 口,再开启数字外设功能

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

180

主题

1701

帖子

0

粉丝