实验1:点亮LED
实验2:按键控制LED
实验3:外部中断检测按键
实验4:扩展芯片检测按键
实验5:定时器实现LED闪烁
实验6:基于PWM的呼吸灯
实验7:检测输入的PWM频率和脉宽
实验8:串口的输入和输出
实验9:串口使用PRINTF函数
实验10:SPI接口操作片外FLASH
实验11:SPI接口操作TF卡
实验12:IIC接口操作OLED屏幕
实验13:ADC电压采样
串口是单片机上非常重要的一个接口,可以用来通信、调试、打印关键信息。本节实验用来实现串口数据的接收和发送。
先看原理图,板子使用的是STM32F103C8T6的串口1,即USART1。该串口连接USB转串口芯片CH340C,最终通过串口线连接电脑,实现串口数据的接收与发送。
步骤如下:
1、新建工程,进行基本配置。通过点击“ACCESS TO MCU SELECTOR”来创建一个新的工程:
参照实验1,芯片选择“STM32F103C8”。
打开外部时钟,点击“System Core”,选择RCC,在右侧弹出的菜单栏中选择“Crystal/Ceramic Resonator”。
选择调试接口,点击“System Core”,选择RCC。,在右侧弹出的菜单栏中选择“Serial Wire”。
2、配置串口。如图,选择异步模式,依次配置波特率、收发模式。
Buad Rate为传输速度,Data Direction配置为支持接收和发送。
3、串口中断配置。开启串口中断。
生成中断相关代码。
4、配置PC15为输出模式,命名为“D1”。可通过串口控制D1状态。
5、时钟配置。参照实验1.
6、参照实验1的步骤7,进行相应配置,生成工程文件。
7、修改工程。位置1,定义相应变量,存储收到的数据或计算数据个数:
代码:
uint8_t aRxBuffer; //½ÓÊÕÖжϻº³å
uint8_t Uart1_RxBuff[256]; //½ÓÊÕ»º³å
uint8_t Uart1_Rx_Cnt = 0; //½ÓÊÕ»º³å¼ÆÊý
uint8_t cAlmStr[] = "Êý¾ÝÒç³ö(´óÓÚ256)\r\n";
uint8_t helloStr[23] = "USART1 start to work!\r\n";
位置2,开启串口接收中断,并输出提示信息:
代码:
HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1);
HAL_UART_Transmit_IT(&huart1, (uint8_t *)&helloStr, 23);
位置3,对接收的数据做判断,并把收到的数据发送出去。
代码:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
/* Prevent unused argument(s) compilation warning */
UNUSED(huart);
/* NOTE: This function Should not be modified, when the callback is needed,
the HAL_UART_TxCpltCallback could be implemented in the user file
*/
if(Uart1_Rx_Cnt >= 255) //Òç³öÅжÏ
{
Uart1_Rx_Cnt = 0;
memset(Uart1_RxBuff,0x00,sizeof(Uart1_RxBuff));
HAL_UART_Transmit(&huart1, (uint8_t *)&cAlmStr, sizeof(cAlmStr),0xFFFF);
}
else
{
Uart1_RxBuff[Uart1_Rx_Cnt++] = aRxBuffer; //½ÓÊÕÊý¾Ý»º´æ
if(aRxBuffer == 'a') //GPIO•¬×ª
{
HAL_GPIO_TogglePin(D1_GPIO_Port,D1_Pin);
}
if((Uart1_RxBuff[Uart1_Rx_Cnt-1] == 0x0A)&&(Uart1_RxBuff[Uart1_Rx_Cnt-2] == 0x0D)) //ÅжϽáÊøλ
{
HAL_UART_Transmit(&huart1, (uint8_t *)&Uart1_RxBuff, Uart1_Rx_Cnt,0xFFFF); //½«ÊÕµ½µÄÊý¾Ý•¢³öÈ¥
Uart1_Rx_Cnt = 0;
memset(Uart1_RxBuff,0x00,sizeof(Uart1_RxBuff)); //Çå¿ÕÊý×é
}
}
HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1); //ÔٴοªÆô½ÓÊÕÖжÏ
}
修改后,保存,编译、下载,重新上电。使用串口助手连接板子和电脑,发送数据,单片机收到后,会直接返回。
整个过程有PPT、数据手册、原理图、源码、相关软件,在公众号(单片机爱好者)回复关键词:002或者STM32CUBEMX教程,即可获取下载链接。