小学生
最后登录1970-1-1
在线时间 小时
注册时间2022-11-19
|
本帖最后由 加贺 于 2022-11-19 16:51 编辑
USART GPIO 配置函数USART_config里 把打开外设USART的时钟放在GPIO配置后,输出结果有事会出现错误为什么?
我更改了USART外设使能语句的位置,调整到了配置玩GPIO代码后。
// 打开串口外设的时钟 DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE); USART_config函数如下
- /**
- * @brief USART GPIO 配置,工作参数配置
- * @param 无
- * @retval 无
- */
- void USART_Config(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- USART_InitTypeDef USART_InitStructure;
- // 打开串口GPIO的时钟
- DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK, ENABLE);
- /*
- //这里配套例程放的位置,注释掉了
- // 打开串口外设的时钟
- DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE);
- */
- // 将USART Tx的GPIO配置为推挽复用模式
- GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_GPIO_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure);
- // 将USART Rx的GPIO配置为浮空输入模式
- GPIO_InitStructure.GPIO_Pin = DEBUG_USART_RX_GPIO_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure);
- //这里里我放的位置
- // 打开串口外设的时钟
- DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE);
- // 配置串口的工作参数
- // 配置波特率
- USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE;
- // 配置 针数据字长
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- // 配置停止位
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- // 配置校验位
- USART_InitStructure.USART_Parity = USART_Parity_No ;
- // 配置硬件流控制
- USART_InitStructure.USART_HardwareFlowControl =
- USART_HardwareFlowControl_None;
- // 配置工作模式,收发一起
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- // 完成串口的初始化配置
- USART_Init(DEBUG_USARTx, &USART_InitStructure);
-
- // 串口中断优先级配置
- NVIC_Configuration();
-
- // 使能串口接收中断
- USART_ITConfig(DEBUG_USARTx, USART_IT_RXNE, ENABLE);
-
- // 使能串口
- USART_Cmd(DEBUG_USARTx, ENABLE);
- }
复制代码
main函数里面只写了发送0xccdd。代码如下。
- int main(void)
- {
- /*初始化USART 配置模式为 115200 8-N-1,中断接收*/
- USART_Config();
- Usart_SendHalfWord( DEBUG_USARTx, 0xccdd);
- /* 发送一个字符串 */
- //Usart_SendString( DEBUG_USARTx,"这是一个串口中断接收回显实验\n");
- //printf("欢迎使用野火STM32开发板\n\n\n\n");
-
- while(1)
- {
-
- }
- }
复制代码 多次按复位键后有可能会多发送一个错误信息FF。结果如下
错误结果图
|
|