1. STM32cubemx 串口设置
代码地址
1. 新建项目选择芯片。
2. 设置时钟源
点击 System Core , 选择RCC 将其时钟源设置为外部晶振,如下图:
3.配置时钟树
将 HCLEK 配置为最大时钟,点击回车,软件归根据芯片自动配置其他总线时钟。
3.配置串口
点击 Connettivity , 选择USART1 将其模式选择为异步通信模式,其他配置串口配置参数根据实际情况修改,如下图:
4. 生产代码工程
配置工程并生成代码。
5. 测试串口输出
打开工程,在main.c中添加如下代码测试代码输出,
HAL_UART_Transmit(&huart1, “testrn”, sizeof(“testrn”), 0xffff);
HAL_Delay(1000);
6. 启用printf函数
新建my_printf.c文件
#include "stdio.h"
#include "main.h"
#ifdef __GNUC_
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
extern UART_HandleTypeDef huart1; //外部串口
PUTCHAR_PROTOTYPE
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
测试printf函数,在main.c中添加如下代码测试代码输出,
printf(“test = %d rn”, 1);
HAL_Delay(1000);
7. 设置中断
启用串口全局中断
8.配置中断嵌套
9. 启动中断,添加中断回调函数
uint8_t aRxBuffer[1];//接受缓存 接受一个字节进入中断
HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, 1); //启动接受中断
//中断回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if (huart->Instance == USART1)
{
HAL_UART_Transmit(&huart1, (uint8_t *)aRxBuffer, 1,0xFFFF);//发送接收数据
HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, 1);//启动下一轮接收
}
}
1. STM32cubemx 串口设置
代码地址
1. 新建项目选择芯片。
2. 设置时钟源
点击 System Core , 选择RCC 将其时钟源设置为外部晶振,如下图:
3.配置时钟树
将 HCLEK 配置为最大时钟,点击回车,软件归根据芯片自动配置其他总线时钟。
3.配置串口
点击 Connettivity , 选择USART1 将其模式选择为异步通信模式,其他配置串口配置参数根据实际情况修改,如下图:
4. 生产代码工程
配置工程并生成代码。
5. 测试串口输出
打开工程,在main.c中添加如下代码测试代码输出,
HAL_UART_Transmit(&huart1, “testrn”, sizeof(“testrn”), 0xffff);
HAL_Delay(1000);
6. 启用printf函数
新建my_printf.c文件
#include "stdio.h"
#include "main.h"
#ifdef __GNUC_
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
extern UART_HandleTypeDef huart1; //外部串口
PUTCHAR_PROTOTYPE
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
测试printf函数,在main.c中添加如下代码测试代码输出,
printf(“test = %d rn”, 1);
HAL_Delay(1000);
7. 设置中断
启用串口全局中断
8.配置中断嵌套
9. 启动中断,添加中断回调函数
uint8_t aRxBuffer[1];//接受缓存 接受一个字节进入中断
HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, 1); //启动接受中断
//中断回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if (huart->Instance == USART1)
{
HAL_UART_Transmit(&huart1, (uint8_t *)aRxBuffer, 1,0xFFFF);//发送接收数据
HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, 1);//启动下一轮接收
}
}
举报