目录
1.1 在头文件drv_uart.h中定义各个用到的管脚/端口号:
参考:手把手教程6: F460使用自带的debug printf功能
- //MUSART1 debug printf 管脚设置
- #define USART1_TX_PORT (PortA)
- #define USART1_TX_PIN (Pin10)
- #define USART1_TX_FUNC (Func_Usart1_Tx)
-
- #define USART1_RX_PORT (PortA)
- #define USART1_RX_PIN (Pin09)
- #define USART1_RX_FUNC (Func_Usart1_Rx)
-
- enum
- {
- UART_COM = 0, //485 通讯口
- UART_DEBUG = 1, //232 debug口
- UART_COM232 = 2, //232 通讯口
- UART1_DEBUG = 3, //UART1 debug口
- UART_MAX
- };
drv_uart_init中增加UART1相关的初始化配置;
由于只会使用到TX,所以RX不用初始化;
- else if (ch == UART1_DEBUG) //初始化MUSART1(debug)
- {
- /*Enable peripheral clock *//*打开时钟*/
- PWC_Fcg1PeriphClockCmd(PWC_FCG1_PERIPH_USART1, Enable);
- /*20211229: Initialize USART IO */ /*配置相应的IO作为串口的TX,RX引脚*/
- PORT_SetFunc(USART1_TX_PORT, USART1_TX_PIN, USART1_TX_FUNC, Disable);
- //接收引脚配置
- //PORT_SetFunc(USART1_RX_PORT, USART1_RX_PIN, USART1_RX_FUNC, Disable);
-
- /*V201:20211229: 配置串口使用的时钟和基本通信配置*/
- stcInitCfg.enClkMode=UsartIntClkCkNoOutput; //使用内部时钟源,不需要在其时钟输出IO上输出通信的时钟信号
- stcInitCfg.enClkDiv=UsartClkDiv_1; //时钟不分频
- stcInitCfg.enDataLength=UsartDataBits8; //一个字节数据用8位数据位表示
- stcInitCfg.enDirection=UsartDataLsbFirst; //先传输低位
- stcInitCfg.enStopBit=UsartOneStopBit; //停止位1位
- stcInitCfg.enParity=UsartParityNone; //无奇偶校验
- stcInitCfg.enSampleMode=UsartSampleBit8; //每次传输8位(1字节),也可以传输 UsartSamleBit16(16位,2字节)
- stcInitCfg.enDetectMode=UsartStartBitFallEdge; //开始位是低电平
- stcInitCfg.enHwFlow=UsartRtsEnable; //使能RTS (串口开始传输前让RTS输出一个高脉冲信号)
- /*初始化串口配置*/
- USART_UART_Init(MUSART1, &stcInitCfg);
- /*设置串口波特率-115200*/
- USART_SetBaudrate(MUSART1, USART1_BAUDRATE);
-
- USART_FuncCmd(MUSART1, UsartTx, Enable); //使能发送
- RX使能
- //USART_FuncCmd(MUSART1, UsartRx, Enable); //使能接收
- //USART_FuncCmd(MUSART1, UsartRxInt, Enable); //使能接收中断
-
- uart[ch].uart = MUSART1;
- uart[ch].name = "uart_4";
- uart[ch].initialize = XX_TRUE;
- TASK_LOG(USE_DEBUG_INIT, ("initialize %s\r\n", uart[ch].name));
- }
drv_uart_close中关闭UART1
- else if (ch == UART1_DEBUG)
- {
- PWC_Fcg1PeriphClockCmd(PWC_FCG1_PERIPH_USART1, Disable); //关闭uart1
- }
增加初始化函数;
- /*******************************************************************************/
- /**
- * @brief uart1_debug端口初始化
- * @param None
- * @retval 初始化成功返回XX_OK; 初始化失败返回XX_ERROR;
- */
- xx_err_t drv_uart1_debug_init(void)
- {
- if (drv_uart_init(UART1_DEBUG) == XX_OK)
- {
- return XX_OK;
- }
- return XX_ERROR;
- }
初始化
最后在主函数文件中需要声明,否则串口功能不正常:
- #if USE_PRINTF
- //use microlib
- #include
- int fputc(int ch, FILE *f)
- {
- return drv_uart_write(UART1_DEBUG, &ch, 1);
- }
-
- #endif
修改完成后,编译下载,运行,UART1可以正常输出打印信息,原来的232端口不再有打印信息了;