STM32H7 CubeMx 串口一配置
目录
1. CubeMx配置
1.1 创建工程
1.2 时钟配置
1.3 串口配置
1.4 工程管理
2. Keil5配置
2.1 添加代码
2.2 修改配置
2.3 下载程序
3. 试验现象
常见问题解决办法
本文主要记录使用CubeMx配置STM32H750ZB串口一的过程,包括遇到的问题。
1. CubeMx配置
1.1 创建工程
选择型号,开始工程
1.2 时钟配置
1.3 串口配置
1.4 工程管理
2. Keil5配置
2.1 添加代码
main.c
/* USER CODE BEGIN Includes */
#include "string.h"
#include "stdio.h"
/* USER CODE END Includes */...../* USER CODE BEGIN 0 */
extern UART_HandleTypeDef huart1;
char send[] = "OK";
uint8_t test[2];
/* USER CODE END 0 */.....MX_GPIO_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 */HAL_UART_Receive_IT(&huart1,test,1);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */printf("my test\r\n");HAL_Delay(1000);}/* USER CODE END 3 */...../* USER CODE BEGIN 4 */
// 发送中断
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{if(huart->Instance == USART1){// HAL_UART_IRQHandler(&huart1);printf("HAL_UART_TxCpltCallback\r\n");HAL_UART_Receive_IT(&huart1,test,1);}
}
// 接收中断函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{char send[] = "OK\r\n";if(huart->Instance == USART1){// HAL_UART_IRQHandler(&huart1);if(test[0] == 1){printf("test[0] == 1\r\n");HAL_UART_Transmit_IT(&huart1, (uint8_t*)send, strlen(send));// HAL_UART_Transmit(&huart1,(uint8_t*)send,strlen(send), 50); // 串口发送数据,使用超时管理机制test[0] = 0;}HAL_UART_Receive_IT(&huart1,test,1);}}
/* USER CODE END 4 */
usart.c
/* USER CODE BEGIN 0 */
#include "stdio.h"
/* USER CODE END 0 *//* USER CODE BEGIN 1 */
/*** 函数功能: 重定向c库函数printf到DEBUG_USARTx* 输入参数: 无* 返 回 值: 无* 说 明:无*/
int fputc(int ch, FILE *f)
{HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);return ch;
}/*** 函数功能: 重定向c库函数getchar,scanf到DEBUG_USARTx* 输入参数: 无* 返 回 值: 无* 说 明:无*/
int fgetc(FILE *f)
{uint8_t ch = 0;HAL_UART_Receive(&huart1, &ch, 1, 0xffff);return ch;
}
/* USER CODE END 1 */
2.2 修改配置
重新编译
2.3 下载程序
这里使用jlink,下边是缺少有关STM32H750ZB相关的软件,搜索下,安装下即可。
(如果搜索不到,可以考虑升级keil版本)
3. 试验现象
常见问题解决办法
程序烧录有问题常见解决办法
常见解决办法一:
常见解决办法二:
修改CubeMX里面的时钟
常见解决办法三:
修改CubeMX里面的堆栈大小