实验操作
1、打开cubemax ,芯片选取。
我们选取STM32F103RCt6 (根据实际情况选择),LQFP64封装的。然后鼠标双击中间那个圈住的地方就可以进入配置界面。
图1、芯片选取界面
图2、配置界面
如上图:
(1)、标号1 为系统核心的配置,其中由晶振的配置。
(2)、标号2为模拟量相关的外设配置,如adc,dac,等。
(3)、标号3为定时器配置。
(4)、标号4为通信相关的外设。比如串口,CAN等。
其他图中有标注。
2、晶振配置
晶振是单片机的时钟来源,相当于心脏,先添加晶振,点击上图编号1,然后出现下图,在点击RCC,进入晶振
如上图:HSE 和LSE 都选择Crystal..选项。然后注意芯片示意图上有四个引脚变为绿色。
3、时钟树配置
点击出现下图,时钟树:
配置时钟树如上图,改好后按回车键生效。
4、中断管理配置:
点击NVIC 后,进入如下界面:
到这里我们STM32的系统基础配置就完成了!
5、外设配置
下面就是结合具体需求来进行配置,例如我们这里讲的是串口1以及串口1的接收中断配置,那么下面开始配置串口1 及其中断。
这里只要选好模式就行,可以注意到,芯片示意图上已经出现了串口1引脚 。但要记住这里的波特率设置为115200了。这里串口就可以正常使用了。但是,我们还需要使用中断,所以还需要配置串口中断。
中断最后还需要设置好优先级:
到这里,串口1的中断就算是配置好了。接下来可以生成代码了,但是需要几个小的配置,点击工程管理
进入管理工程界面,
到这里软件的工程的软件配置部分就结束了,然后生成工程代码,
6、工程代码上的配置以及修改
使用keil5 打开刚刚生成的工程代码。
找到main.c, 会发现如上图的主函数结构,其中
MX_USART1_UART_Init(); 就是软件生成的串口1初始化配置。
如下图,光标放在相应的函数上,鼠标右击,选择GO TO Definetion.. 选项即可进行跳转。
跳转进入usart.c 文件,会看到,MX_USART1_UART_Init();的函数体。
#if 1
#pragma import(__use_no_semihosting)
struct __FILE
{
int handle;
};
FILE __stdout;
void _sys_exit(int x)
{
x = x;
}
int fputc(int ch, FILE *f)
{
while((USART1->SR&0X40)==0);
USART1->DR = (uint8_t) ch;
return ch;
}
#endif
在这个usart.c文件中添加如下代码:,如下图所示
这段代码可以在STM32中正常使用printf()函数。具体添加位置可以如下图,注意所在的文件和位置。同时不要忘了在usart.h 文件中添加#include “stdio.h”
添加 #include “stdio.h”
经过上述两步就可以正常使用printf() 函数了。
最后配置中断相关的函数,
(1)、找到中断服务函数
位于stm32f1xx_it.c 文件中
(2)、找到中断回调函数
1)、HAL_UART_IRQHandler(&huart1);
2)、UART_Receive_IT(huart);
3)、HAL_UART_RxCpltCallback(huart);
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
从1)可以跳转到3),
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart); 就是串口中断回调函数 。
并且将void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)复制到usart.c文件中,如下图。在这个函数中就可以写中断逻辑
(3)、开启接收中断
HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
在这个函数中会使能接收中断,需要三个参数,分别为
1)、串口句柄,
2)、保存接收数据的数组,
3)、每次接受的数据字节数,
所以我们需要首先定义一个保存接收数据的数组。
然后开启中断,需要写在两个地方,分别是串口初始化的时候和回调函数的最后,如下图所示,
最后 在回调函数里加入如下代码进行测试:
最后下载程序测试,
点击发送,单片机收到数据,就会打印出123.(因为我们使用的是串口1的接收中断,所以通过串口助手给串口一发数据,串口1接收到数据,就会触发接收中断,执行中断服务函数,最终执行到回调函数也就是我们的中断逻辑。这里的回调函数只是为了说明问题,实际使用时还需要判断是哪个串口触发的中断。)
上一篇:STM32F1串口通信总结
下一篇:【STM32】HAL库 STM32CubeMX教程四---UART串口通信详解
推荐阅读最新更新时间:2024-11-06 18:03
设计资源 培训 开发板 精华推荐
- LTC3424EMS 演示板、低输出电压同步升压转换器、1V 至 1.6V 输入、1.8Vout @ 600mA
- #第六届立创电赛#智能胸外按压电除颤综合抢救仪
- 具有感应电阻器的 LTC3870EUF-1 高效率、4 相 1.5V/80A 降压转换器的典型应用电路
- 使用 STMicroelectronics 的 TS4601BEIJT 的参考设计
- 立创EDA小灯,手机APP对RGB灯进行调亮度
- 使用 Analog Devices 的 LTC3602IUF 的参考设计
- {训练营}物联网时钟桌搭
- Linux®POS读卡器
- 使用 ON Semiconductor 的 FAN5606 的参考设计
- LT1497 的典型应用 - 双路 125mA、50MHz 电流反馈放大器