一使用cubemx创建工程
首先打开cubemx这个软件,然后选择新建工程
然后选择我们的芯片类型,根据自己的芯片类型选择
①配置时钟
根据芯片情况来配置时钟源,我们这里选择的外部时钟源
接下来是对时钟树的配置
在上面黑框类输入最大的然后按一下回车,他就会帮你配置好
②配置串口中断
首先是开启这个串口,开启串口的中断
我们这里选择的波特率是115200,这里的波特率必须跟通信的另一方波特率相同,否则会出现乱码
接下来是开启串口的中断
到这里我们就完成了串口的配置,接下来我们需要保存工程,打开工程。
下面就是输入工程名称,尽量选择英文名称,选择编译文件,如果你是kiel5就选择跟我一样的
勾选上面的设置,然后生成工程,打开工程
③内部程序编写
首先我们在这里添加如下代码
uint8_t mmm[20]={"hello windows "};
uint8_t USART1_RXbuff;
uint8_t aa[1]="#";
uint8_t gg[1]="*";
char ss =1;
定义基本的参数
下面是在这个位置添加如下代码
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance==USART1)
{
if(USART1_RXbuff==aa[0])
{
ss=1;
}
if(USART1_RXbuff==gg[0])
{
ss=0;
}
}
HAL_UART_Receive_IT(&huart1,(void *)&USART1_RXbuff,1);
}
接下来是
HAL_UART_Receive_IT(&huart1,(void *)&USART1_RXbuff,1);
接下来在mian函数中while循环中添加如下函数
if(ss==1){
HAL_UART_Transmit_IT(&huart1,mmm,sizeof(mmm));
HAL_Delay(1000);
}
到这里程序就编写完成了
④具体原理
STM32的USART通用同步异步收发器是一个串行通信设备,可以灵活的与外部设备进行全双工数据交换。
有别于USART,还有一个UART,它在USART基础上裁减掉了同步通信功能,只有异步通信。简单区分同步和异步就是看通信时需不需要对外提供时钟输出,我们平时用的串口通信基本都是UART。
串口通信一般是以帧格式传输数据,即一帧一帧传输,每帧包含有起始信号、数据信息、停止信息,可能还有校验信息。
USART满足外部设备对工业标准NRZ异步串行数据格式的要求,并且使用了小数波特率发生器,可以提供多种波特率,使得它的应用更加广泛。
USART支持同步单向通信和半双工发单线通信;还支持同步单向通信和半双工单线通信;还支持局域互连网络LIN、智能卡(SmartCard)协议与 IrDA(红外线数据协会) SIR ENDEC规范。
USART支持使用DMA,可实现高速数据通信。
⑤总结
我们是通过串口通信吗,设置串口1,单片机发送hellow windows,一直发送,当上位机发送#号到单片机时停止发送,当上位机*号到单片机时开始发送。