一.实验原理
了解串口协议和RS-232标准,以及RS232电平与TTL电平的区别;了解"USB/TTL转232"模块(以CH340芯片模块为例)的工作原理。
二.工程创建
2.1创建工程及配置
选择STM32F103C8T6芯片
2.1.1RCC配置
2.1.2时钟配置
配置最大始终为72MHz,APB2为72MHz,APB1为36MHz
2.1.3串口配置
2.1.4串口引脚参数配置
2.1.5生成文件
2.2添加程序
while (1)
{
/* USER CODE END WHILE */
HAL_UART_Transmit(&huart1, "hello windows!\r\n",16,100);//发送hello windows!
HAL_Delay(2000);//延时2秒
/* USER CODE BEGIN 3 */
}
//在private variable处定义,或者也可以在main中定义,与c差不多
uint8_t message[]="hello windows!\r\n";
//在while中代码
while (1)
{
/* USER CODE END WHILE */
HAL_UART_Transmit(&huart1, message,16,100);
HAL_Delay(2000);
/* USER CODE BEGIN 3 */
}
2.3烧录运行结果
三.拓展(使用字符控制)
3.1创建工程
和上述过程一样
3.1.开启串口USART1的中断
3.2添加程序
// 添加定义
#define LENGTH 1 //接收字符数目
uint8_t RxBuffer[LENGTH];//接收数据
uint8_t RxFlag = 0; //0表示没有收到`#`收到`*`,1表示收到了`#`
//main.c中while循环
HAL_UART_Receive_IT(&huart1, (uint8_t*)RxBuffer, LENGTH); //使能接收中断
while (1)
{
/* USER CODE END WHILE */
if(RxFlag==0){
HAL_UART_Transmit(&huart1, (uint8_t *)"hello windows!\r\n", 16, 0xffff);
HAL_Delay(1000);
}
/* USER CODE BEGIN 3 */
}
//接收回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){
if(huart->Instance == USART1 && *RxBuffer == '#'){
RxFlag = 1;
}else if (huart->Instance == USART1 && *RxBuffer == '*'){
RxFlag = 0;
}
HAL_UART_Receive_IT(&huart1, (uint8_t*)RxBuffer, LENGTH); //因为它有效性只有一次,所以在接收完成后需要重新使能
}