//该例程为UART0,该串口与UART1不同,不支持标准波特率,不支持流控 //配置方法也与UART1不一样 //将源文件 SDK\hardware\peripheral\uart_ex.c 加入到项目工程 //添加头文件 #include "uart_ex.h" //配置TX RX,不支持流控 #define PIN_UART0_TX 7 #define PIN_UART0_RX 9 //波特率仅支持以下值 typedef enum { UART0_BAUDRATE_1K = 1000, UART0_BAUDRATE_2K = 2000, UART0_BAUDRATE_4K = 4000, UART0_BAUDRATE_5K = 5000, UART0_BAUDRATE_10K = 10000, UART0_BAUDRATE_20K = 20000, UART0_BAUDRATE_25K = 25000, UART0_BAUDRATE_50K = 50000, UART0_BAUDRATE_100K = 100000, UART0_BAUDRATE_500K = 500000, UART0_BAUDRATE_1M = 1000000, }uart0_baudrate_cfg; //默认波特率 #define UART0_BAUD_RATE_DEFAULT UART0_BAUDRATE_1K //全局静态配置变量,在芯片唤醒处POWER_SLEEP_LEAVE_TOP_HALF和上电初始化都需要使用 static uart_ex_cfg_t uart_ex_config; //===================================================================== //与其它任何高速时钟的外设一样,都需要在POWER_SLEEP_LEAVE_TOP_HALF进行restore设置一次 //如果不配置,则芯片休眠唤醒后无UART0功能 static void peripheral_restore(void) { uart_ex_open(HS_UART0, &uart_ex_config); } //===================================================================== //接收回调 static void uart0_rx_data_handler(uint8_t data) { //接收测试,收到立刻发送 uart_ex_send_block(HS_UART0, &data, 1); } //===================================================================== //上电初始化内容 //配置UART TX脚位 static void uart0_config(void) { //配置UART0 TX脚位 pinmux_config(PIN_UART0_TX, PINMUX_UART0_SDA_O_CFG); pmu_pin_mode_set(BIT_MASK(PIN_UART0_TX), PMU_PIN_MODE_PP); //配置UART0 RX脚位 #if defined(PIN_UART0_RX) pinmux_config(PIN_UART0_RX, PINMUX_UART0_SDA_I_CFG); pmu_pin_mode_set(BIT_MASK(PIN_UART0_RX), PMU_PIN_MODE_PU); #endif /* baud_rate[]={1000,2000,4000,5000,10000,20000,25000,50000,100000,500000,1000000} mode smod_val baud_rate UART_EX_MD_2 SMOD_1 1000000 UART_EX_MD_2 SMOD_0 500000 UART_EX_MD_1 x 1000~500000 UART_EX_MD_3 x 1000~500000 */ memset(&uart_ex_config, 0, sizeof(uart_ex_cfg_t)); uart_ex_config.baud_rate=UART0_BAUD_RATE_DEFAULT; uart_ex_config.tb80_val=1; uart_ex_config.rb80_val=1; if(uart_ex_config.baud_rate<UART0_BAUDRATE_500K) { uart_ex_config.mode=UART_EX_MD_1; uart_ex_config.smod_val=SMOD_1; } else if(uart_ex_config.baud_rate==UART0_BAUDRATE_500K) { uart_ex_config.mode=UART_EX_MD_2; uart_ex_config.smod_val=SMOD_0; } else if(uart_ex_config.baud_rate==UART0_BAUDRATE_1M) { uart_ex_config.mode=UART_EX_MD_2; uart_ex_config.smod_val=SMOD_1; } #if defined(PIN_UART0_RX) uart_ex_config.rx_cb=uart0_rx_data_handler; #else uart_ex_config.rx_cb=NULL; #endif //也可以配置发送回调,此处未定义 uart_ex_config.tx_cb=NULL; //打开串口外设 uart_ex_open(HS_UART0, &uart_ex_config); //发送测试, 可删除 uint32_t tx_idx; const char tx_string[]="UART0 Enable\n"; for(tx_idx=0; tx_idx<strlen(tx_string); tx_idx++) { uart_ex_send_block(HS_UART0, (uint8_t *)&tx_string[tx_idx], 1); } //如果开启了接收,则必须关闭芯片休眠功能 #if defined(PIN_UART0_RX) co_power_sleep_enable(false); #else co_power_sleep_enable(true); #endif } |