使用 GPIO、UART 和 Timer 实现基本功能
111111展示如何配置和使用 GPIO、UART 以及定时器,结合基本的 LED 闪烁和 UART 串口通信功能。1. 项目准备
在开始编写代码前,确保以下开发环境和工具已经就绪:
IDE: Keil MDK 或 IAR Embedded Workbench(或者其他兼容 ARM 的开发工具)。
HC32 SDK: 使用官方 SDK 或库,可以从鸿芯半导体官方网站下载 SDK,内含硬件抽象层(HAL)库。
调试工具:可以使用 J-Link、ST-Link 等调试器。
程序设计概要
该程序将做以下几件事情:
配置一个 GPIO 引脚控制 LED,使 LED 以 1 秒的频率闪烁。
配置 UART1 接口,通过串口发送一条欢迎信息并实现简单的回显功能。
使用定时器中断控制 LED 的闪烁频率。
代码实现
引入必要的头文件和定义
首先引入 HC32 SDK 提供的头文件和定义,设置 LED 和 UART 引脚。
c
复制代码
#include "hc32_ddl.h"
// 定义 LED 引脚和 UART1 引脚
#define LED_PORT GPIO_PORT_1
#define LED_PIN GPIO_PIN_0
#define UART_RX_PORT GPIO_PORT_1
#define UART_RX_PIN GPIO_PIN_2
#define UART_TX_PORT GPIO_PORT_1
#define UART_TX_PIN GPIO_PIN_3
GPIO 配置
配置 GPIO 引脚以控制 LED,通过设置 GPIO 为输出模式,操作输出高低电平控制 LED 的亮灭。
c
void GPIO_Init(void)
{
stc_gpio_init_t stcGpioCfg;
// 初始化 GPIO 配置结构体
MEM_ZERO_STRUCT(stcGpioCfg);
stcGpioCfg.u16PinDir = PIN_DIR_OUT;// 设置引脚为输出模式
// 初始化 LED 引脚
GPIO_Init(LED_PORT, LED_PIN, &stcGpioCfg);
}
UART 初始化
初始化 UART1 接口,设置波特率为 115200,配置接收和发送引脚。之后可以通过 UART 发送和接收数据。
c
复制代码
void UART_Init(void)
{
stc_uart_init_t stcUartInit;
MEM_ZERO_STRUCT(stcUartInit);
// 配置 UART 初始化结构体
stcUartInit.u32Baudrate = 115200;
stcUartInit.u32OverSampleBit = UART_OVER_SAMPLE_8BIT;
stcUartInit.u32StopBit = UART_STOPBIT_1BIT;
stcUartInit.u32Parity = UART_PARITY_NONE;
// 初始化 UART1
UART_Init(M4_USART1, &stcUartInit);
// 配置 TX 和 RX 引脚
GPIO_SetFunc(UART_TX_PORT, UART_TX_PIN, GPIO_FUNC_5_USART);
GPIO_SetFunc(UART_RX_PORT, UART_RX_PIN, GPIO_FUNC_5_USART);
// 启用 UART 发送和接收功能
UART_FuncCmd(M4_USART1, UART_RX | UART_TX, Enable);
}
定时器配置
配置 Timer4 来实现每秒触发中断,控制 LED 的闪烁。
c
复制代码
void Timer4_Init(void)
{
stc_timer4_cnt_init_t stcCntInit;
MEM_ZERO_STRUCT(stcCntInit);
// 设置计数器周期为 1 秒(假设系统时钟为 16 MHz)
stcCntInit.u16CntClkDiv = TIMER4_CNT_CLK_DIV256;
stcCntInit.u16CntPeriod = 62500;// 每个周期 = 16MHz / 256 / 62500 = 1Hz
// 初始化 Timer4 计数器
TIMER4_CNT_Init(M4_TMR41, &stcCntInit);
// 启用 Timer4 中断
TIMER4_CNT_IntCmd(M4_TMR41, Enable);
NVIC_ClearPendingIRQ(TMR41_CNT_IRQn);
NVIC_SetPriority(TMR41_CNT_IRQn, DDL_IRQ_PRIORITY_03);
NVIC_EnableIRQ(TMR41_CNT_IRQn);
// 启动 Timer4
TIMER4_CNT_Start(M4_TMR41);
}
又是把正文当回复贴来发了
页:
[1]