一、开发环境
硬件:STM32F407 核心开发板
单片机:STM32F407VET6
Keil版本:5.32
STM32CubeMX版本:6.11.0
二、配置STM32CubeMX
1. 选择时钟源
2. 配置时钟
3. 使能Debug功能:Serial Wire
4. HAL库时基选择:SysTick
5. USART1配置:选择异步模式。
6. 配置工程参数:在Project标签页中,配置项目名称和位置,选择工具链MDK-ARM。
7. 生成代码:在Code Generator标签页中,配置工程外设文件与HAL库,勾选头文件.c和.h文件分开,然后点击Project > Generate Code生成代码。
三、代码实现与部署
1. main.c增加代码:添加printf的头文件 #include "stdio.h",定义变量RxBuffer和RxFlag,然后按照陶晶驰串口屏的通信协议发送即可,例子如下。
添加串口接收的中断函数,即可实现串口接收。
#include "stdio.h"
uint8_t RxBuffer; //接收缓冲区
uint16_t RxFlag = 0; //接收完成标志;0表示接受未完成,1表示接收完成
printf("page0.t2.txt=\"三角波\"\xFF\xFF\xFF");
printf("page0.n0.val=%d\xFF\xFF\xFF", Fre);
/* USER CODE BEGIN 3 */
if(RxFlag == 1)
{
RxFlag = 0;
}
/* USER CODE END 3 */
/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == USART1) //判断发生接收中断的串口
{
RxFlag = 1; //置为接收完成标志
}
HAL_UART_Receive_IT(&huart1, (uint8_t *)&RxBuffer, 2);
}
/* USER CODE END 4 */
2. usart.c增加代码:添加头文件#include "stdio.h"。在末尾用户代码区增加如下代码。
#include "stdio.h"
/* USER CODE BEGIN 1 */
struct __FILE
{
int a;
};
FILE __stdout;
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, 0xffff); //HAL库串口发送函数
return ch;
}
int fgetc(FILE *f)
{
uint8_t ch = 0;
HAL_UART_Receive(&huart1, &ch, 1, 0xffff); //HAL库串口接收函数
return ch;
}
/* USER CODE END 1 */