/********************************** (C) COPYRIGHT ******************************* * File Name : Main.c * Author : WCH * Version : V1.0 * Date : 2020/08/06 * Description : 串口1收发演示 ********************************************************************************* * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. * Attention: This software (modified or not) and binary are used for * microcontroller manufactured by Nanjing Qinheng Microelectronics. *******************************************************************************/ #include "CH57x_common.h" uint8_t TxBuff[] = "This is a tx exam\r\n"; uint8_t RxBuff[100]; uint8_t trigB; /********************************************************************* * @fn main * * [url=home.php?mod=space&uid=247401]@brief[/url] 主函数 * * [url=home.php?mod=space&uid=266161]@return[/url] none */ int main() { uint8_t len; SetSysClock(CLK_SOURCE_PLL_60MHz); /* 配置串口1:先配置IO口模式,再配置串口 */ GPIOA_SetBits(GPIO_Pin_9); GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU); // RXD-配置上拉输入 GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA); // TXD-配置推挽输出,注意先让IO口输出高电平 UART1_DefInit(); #if 1 // 测试串口发送字符串 UART1_SendString(TxBuff, sizeof(TxBuff)); #endif #if 1 // 查询方式:接收数据后发送出去 PRINT("start\n"); while(1) { // len = UART1_RecvString(RxBuff); // if(len) // { // UART1_SendString(RxBuff, len); // } //UART1_SendString("1234", 4); printf("666"); DelayMs(1000); } #endif #if 0 // 中断方式:接收数据后发送出去 UART1_ByteTrigCfg(UART_7BYTE_TRIG); trigB = 7; UART1_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_LINE_STAT); PFIC_EnableIRQ(UART1_IRQn); #endif while(1); } /********************************************************************* * @fn UART1_IRQHandler * * @brief UART1中断函数 * * @return none */ __attribute__((interrupt("WCH-Interrupt-fast"))) __attribute__((section(".highcode"))) void UART1_IRQHandler(void) { volatile uint8_t i; switch(UART1_GetITFlag()) { case UART_II_LINE_STAT: // 线路状态错误 { UART1_GetLinSTA(); break; } case UART_II_RECV_RDY: // 数据达到设置触发点 for(i = 0; i != trigB; i++) { RxBuff[i] = UART1_RecvByte(); UART1_SendByte(RxBuff[i]); } break; case UART_II_RECV_TOUT: // 接收超时,暂时一帧数据接收完成 i = UART1_RecvString(RxBuff); UART1_SendString(RxBuff, i); break; case UART_II_THR_EMPTY: // 发送缓存区空,可继续发送 break; case UART_II_MODEM_CHG: // 只支持串口0 break; default: break; } }
举报
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
3
46
0
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注电源系统设计
扫码关注21ic项目外包
扫码浏览21ic手机版
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才
京公网安备 11010802024343号