普冉单片机py32c643 USART LL库
时间: 2024-12-26 07:19:45 浏览: 4
### 关于普冉单片机 PY32C643 使用 USART LL 库
对于普冉单片机PY32C643系列微控制器,使用LL库来配置和操作USART接口可以提供更底层的控制能力以及更高的灵活性。下面展示如何通过LL库实现基本的串口通信功能。
#### 初始化系统时钟与GPIO端口设置
为了使能USART外设的工作,在进入具体USART配置之前先要完成必要的准备工作:
```c
#include "py32f0xx_ll_usart.h"
#include "py32f0xx_ll_rcc.h"
#include "py32f0xx_ll_bus.h"
#include "py32f0xx_ll_gpio.h"
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void){
/* Reset of all peripherals, Initializes the Flash interface and Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize GPIOs */
MX_GPIO_Init();
}
```
上述代码片段展示了初始化过程中的关键部分[^1]。这里调用了`SystemClock_Config()`用于设定系统的主频;而`MX_GPIO_Init()`负责配置通用输入/输出引脚作为USART的数据线和信号线。
#### 配置USART参数并启动传输接收
接着定义具体的USART初始化函数如下所示:
```c
#define BAUDRATE 9600U
#define UARTx_CLK_ENABLE() __HAL_RCC_USART2_CLK_ENABLE()
#define UARTx_TX_PIN LL_GPIO_PIN_2
#define UARTx_RX_PIN LL_GPIO_PIN_3
#define UARTx_PORT GPIOA
#define UARTx_INSTANCE USART2
static void MX_USART2_UART_Init(void){
/* Enable clocks for USART module and related GPIO port */
UARTx_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
/* Configure TX/RX pins as alternate function push-pull */
LL_GPIO_SetPinMode(UARTx_PORT, UARTx_TX_PIN, LL_GPIO_MODE_ALTERNATE);
LL_GPIO_SetAFIO(UARTx_PORT,UARTx_TX_PIN,LL_GPIO_AF_1);
LL_GPIO_SetPinSpeed(UARTx_PORT, UARTx_TX_PIN, LL_GPIO_SPEED_FREQ_HIGH);
LL_GPIO_SetPinOutputType(UARTx_PORT, UARTx_TX_PIN, LL_GPIO_OUTPUT_PUSHPULL);
LL_GPIO_SetPinPull(UARTx_PORT, UARTx_TX_PIN, LL_GPIO_PULL_NO);
LL_GPIO_SetPinMode(UARTx_PORT, UARTx_RX_PIN, LL_GPIO_MODE_INPUT);
LL_GPIO_SetPinPull(UARTx_PORT, UARTx_RX_PIN, LL_GPIO_PULL_UP);
/* Set baud rate to desired value */
LL_USART_SetBaudRate(UARTx_INSTANCE, SystemCoreClock , LL_USART_OVERSAMPLING_16,BAUDRATE);
/* Other configurations such as word length, stop bits etc...*/
LL_USART_ConfigCharacter(UARTx_INSTANCE, LL_USART_DATAWIDTH_8B, LL_USART_STOPBITS_1);
LL_USART_SetTransferDirection(UARTx_INSTANCE, LL_USART_DIRECTION_TX_RX);
LL_USART_EnableHalfDuplex(UARTx_INSTANCE);
/* Finally enable the USART peripheral */
LL_USART_Enable(UARTx_INSTANCE);
}
/* Call this initialization routine inside your main program loop after other initializations */
MX_USART2_UART_Init();
```
这段代码实现了对USART模块的基本配置,包括但不限于波特率、数据位宽、停止位数等重要属性,并启用了半双工模式下的发送接收方向[^2]。
#### 发送字符到指定USART设备
当完成了硬件层面的基础搭建之后就可以着手准备实际的消息传递工作了。下面给出了一种简单的字符串打印方式供参考:
```c
void SendString(const char *str){
while(*str != '\0'){
/* Wait until TXE flag is set by hardware */
while(LL_USART_IsActiveFlag_TC(UARTx_INSTANCE)== RESET){}
/* Write character into data register */
LL_USART_TransmitData8(UARTx_INSTANCE,*str++);
}
}
```
此段程序会逐字节地向目标USART实例写入待传送的信息直到遇到终止符为止。每次写入前都会等待上一次的操作结束以确保不会发生冲突或丢失数据的情况。
阅读全文