目录
一、CubeMX配置
创建新项目
选择自己使用的芯片
配置RCC
配置高速时钟
打开USART1
在串口配置这里,选择串口1,使能串口1
1、点击MODE为异步通信(Asynchronous)
2、基础参数:波特率115200bits/s,传输数据长度为8Bit,奇偶校验无,停止位1,接收发送都使能
使能串口中断
时钟数的配置
文件设置
打开工程
二、系统板与串口的连线(usart1)
系统板 | USB转TTL |
---|---|
PA9(系统板的) | RXD |
PA10 | TXD |
三、Keil中的代码
1、在main函数前定义全局变量
#include <string.h>
char c;//指令 0:停止 1:开始
char message[]="hello Windows\n";//输出信息
char tips[]="CommandError\n";//提示1
char tips1[]="Start.....\n";//提示2
char tips2[]="Stop......\n";//提示3
int flag=0;//标志 0:停止发送 1.开始发送
2、在main函数中设置接收中断
将下列代码添加到main函数内,while前
HAL_UART_Receive_IT(&huart1, (uint8_t *)&c, 1);//中断*斜体样式*
在while循环内添加传输代码
if(flag==1){
//发送信息
HAL_UART_Transmit(&huart1, (uint8_t *)&message, strlen(message),0xFFFF);
//延时
HAL_Delay(1000);
}
3、在main函数下重写中断回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
//当输入的指令为0时,发送提示并改变flag
if(c=='0'){
flag=0;
HAL_UART_Transmit(&huart1, (uint8_t *)&tips2, strlen(tips2),0xFFFF);
}
//当输入的指令为1时,发送提示并改变flag
else if(c=='1'){
flag=1;
HAL_UART_Transmit(&huart1, (uint8_t *)&tips1, strlen(tips1),0xFFFF);
}
//当输入不存在指令时,发送提示并改变flag
else {
flag=0;
HAL_UART_Transmit(&huart1, (uint8_t *)&tips, strlen(tips),0xFFFF);
}
//重新设置中断
HAL_UART_Receive_IT(&huart1, (uint8_t *)&c, 1);
}
4、编译
没有错误,没有警告
5、打开flymcu烧录
四、测试效果
打开串口调试助手
刚开始没有成功,重新试了很多遍,然后发现我之前在串口助手这儿勾选了加回车换行(这意味着我发送给stm32的数据都添加了换行符\n,所以与发送的不同,所以就没成功,取消勾选就可以了)
五、Keil仿真逻辑分析仪功能观察串口输出波形
分析:时序状态正确
波特率可以使用如下公式进行计算:
Baud,rate = frac {传输速率} {log_2 (ext {符号个数})}
六、问题与反思
1、端口显示“非旺玖原装的PL2303,请联系供应商”
这是因为我安装的驱动版本过高,选择低版本的就成功了。
下载:
链接:https://pan.baidu.com/s/1uzw4xOeYJb0UEg9w800GSg?pwd=htyx
提取码:htyx
下载安装后
在设备管理器点击端口
->非旺玖原装的PL2303,请联系供应商
选择版本更低的那个
2、FlyMcu烧录不成功
在烧录时,BOOT0先置为1
,在烧录完成后,需要传输数据时,再将BOOT0置为0
,然后按下复位键,才能传输数据