最近在项目中使用CW32 MCU,完成了一个简单的UART串口通信和GPIO控制的功能。CW32 MCU的资源相对丰富,特别适合一些低成本、低功耗的嵌入式应用。这里分享一下UART通信与GPIO的基础代码,供大家参考。
首先,我配置了UART串口,用于与PC端进行通信,实现数据的收发。同时,GPIO口用于控制LED的开关状态,接收串口数据后,点亮或熄灭LED。代码如下:
- #include "cw32f030.h"
- void UART_Init(void) {
- // 配置UART,波特率9600
- UART_Config_t uartConfig;
- uartConfig.baudRate = 9600;
- uartConfig.wordLength = UART_WordLength_8b;
- uartConfig.stopBits = UART_StopBits_1;
- uartConfig.parity = UART_Parity_No;
- UART_Init(UART1, &uartConfig);
- UART_Cmd(UART1, ENABLE);
- }
- void GPIO_Init(void) {
- // 初始化GPIO,用于控制LED
- GPIO_InitTypeDef gpioConfig;
- gpioConfig.Pin = GPIO_Pin_1;
- gpioConfig.Mode = GPIO_Mode_Out_PP;
- GPIO_Init(GPIOB, &gpioConfig);
- }
- void UART1_IRQHandler(void) {
- // 接收数据并控制LED
- if (UART_GetITStatus(UART1, UART_IT_RXNE)) {
- char receivedChar = UART_ReceiveData(UART1);
- if (receivedChar == '1') {
- GPIO_SetBits(GPIOB, GPIO_Pin_1); // 点亮LED
- } else if (receivedChar == '0') {
- GPIO_ResetBits(GPIOB, GPIO_Pin_1); // 熄灭LED
- }
- }
- }
- int main(void) {
- // 初始化UART和GPIO
- UART_Init();
- GPIO_Init();
-
- while (1) {
- // 主循环等待中断
- }
- }
代码解释:- UART_Init():配置了UART1的串口参数,波特率设置为9600,8位数据位,无校验位,1个停止位。
- GPIO_Init():初始化GPIO,用于控制LED的状态。GPIO_Pin_1作为输出引脚。
- UART1_IRQHandler():串口中断处理函数。当串口接收到数据后,通过中断判断数据内容,并根据接收到的字符控制GPIO,点亮或熄灭LED。
这个简单的例子展示了如何通过CW32 MCU的UART串口接收数据并控制GPIO,实际项目中可以根据需要进行更复杂的扩展。
|