环境
硬件:stm32f103c8t6 核心板(usb tx接核心板A10,Rx接A09)
软件:STM32CubeMX
软件:keil5 mdk
cubeMX配置:
晶振配置
时钟配置(根据自己板子上的晶振频率酌情设置)注: HSE:外部高速晶振 LSE:外部低速晶振
使能USART1 全局中断
点击 GENERATE CODE 生成代码。然后打开工程
在keil5 mdk:
在文件stm32f1xx_hal_uart.h开头添加代码
/* External variables --------------------------------------------------------*/
extern UART_HandleTypeDef huart1; //声明串口
/* USER CODE BEGIN EV */
在文件 main.c中的while循环里添加代码
/* USER CODE BEGIN PV /
uint8_t TxBuffer[] = “hello windows!”;
/ USER CODE END PV */
while (1)
{
HAL_UART_Transmit_IT(&huart1, TxBuffer, sizeof(TxBuffer));
HAL_Delay(1000); //延时1s
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == USART1)
{
HAL_UART_Transmit_IT(&huart1,(uint8_t *)RxBuffer,10);
HAL_UART_Receive_IT(&huart1,(uint8_t *)RxBuffer,10);
}
}
编译,将程序烧录或下载进核心板,打开串口助手查看接收到的数据
在增加新功能:实现板载led亮,要在cubeMX配置GPIO
UART函数库
HAL_UART_Transmit():串口发送数据,使用超时管理机制
HAL_UART_Receive():串口接收数据,使用超时管理机制
HAL_UART_Transmit_IT():串口中断模式发送
HAL_UART_Receive_IT():串口中断模式接收
HAL_UART_Transmit_DMA():串口DMA模式发送
HAL_UART_Transmit_DMA():串口DMA模式接收
printf重定向办法:
#include "stdio.h"
printf("freeRTOS test\r\n");
int fputc(int ch, FILE *f){
HAL_UART_Transmit(&huart1, (uint8_t *)&ch,1,HAL_MAX_DELAY);
return ch;
}
int fgetc(FILE *f){
uint8_t ch;
HAL_UART_Receive(&huart1, (uint8_t *)&ch,1,HAL_MAX_DELAY);
return ch;
}