此为实验记录部分,仅仅展示操作步骤,理论部分稍后放出。
串口通讯
开发环境简介:
Clion+STM32CUBEMX+OPENOCD开发
使用的开发板是STM32F407ZGT6
开发IDE是Clion的SW4STM32嵌入式开发
对于简单的串口通讯,其实总得来说,在不使用中断,不考虑能耗的情况下,初始MX设置就只有
1.基本启动设置
2.串口设置
3.时钟设置(简而言之,未系统学习时钟树情况下,无脑将单个区域配置到最大且能通过即可)
4.编写 [LOOP]
开发环境介绍:
1.STM32CUBEMX进行初始化MCU配置生成初始CODE;
2.Clion编写 [SETUP] 部分及 [LOOP] 部分;
3.OPENOCD通过 [ST-LINK] 进行上传;
4.Serial_Ports_Monitor for Clion插件进行串口 [COM4] 监视与通讯;区域与预览区域中间;
步骤操作:
壹,简单的串口通信
一定要注意这里工程的位置,要跟后面对应
在这里切换芯片,因为Clion调用MX默认生成的是F0系列MCU
这里没有自己的板子也没事。
一,STM32CUBEMX进行初始化MCU配置生成初始CODE:
1.SYS通讯设置:
因为使用的ST-LINK,故DEBUG模式选择serial Wire;如果是J-LINK就选JTAG模式。
2.RCC系统时钟设置
进行时钟RCC选项配置。点击 System Core下拉栏中的 RCC。可以都选外部晶振Crystal/Ceramic Resonator。
其中:
BYPASS Clock Source(旁路时钟源)
Crystal/Ceramic Resonator(石英/陶瓷 晶振)
3.基本串口启用及设置
启用串口1,选择Asynchronous模式(异步模式),同时设置该串口基本参数。
分别是:波特率115200 Bits/s,传输数据长度为8 Bit,奇偶检验无,停止位1,
高级参数:接受和发送模式,16位;(这些参数先照着设置就好了,没有特别需要默认这样就好了)
这里是全局中断设置,本次实验暂时不需要;
4.时钟树的简单配置
对于未学习时钟树的初学者,在不考虑稳定性,能耗,干扰等情况下,简单配置时钟树的方法便是将所示区域频率通过前方衰减倍率调至极限。
1.选择外部高速时钟HSE 8MHz
2.PLL锁相环倍频168倍
3.系统时钟来源选择为PLL
4.设置AHP分频器为/1
4.设置APB1分频器为 /4,设置APB2分频器为 /2其中:注意:
HSI:High Speed Internal Clock Signal的缩写,即内部高速时钟信号,精度偏低,随使用时间的增加,误差较大,适合对时间要求不高的项目
HSE:High Speed External Clock Signal的缩写,即外部高速时钟信号,精度更高,随使用时间的增加,误差较小,适合对时间要求高的项目
1.HCLK的值越大,运算速度越快,但是,当HCLK达到最大值时,有可能出现不稳定的情况
2.不同定时器搭载在不同的APBx下,具体情况需查阅芯片手册,只有确定了定时器搭载的APBx,才能根据预分频系数(Prescaler)和计数周期(Counter Period)确定定时器的定时时间。
5.生成初始化代码
Project Name:工程名称
Project Location:点击后面的"Browse"选择你想要将生成的工程保存到哪个目录里面。
Application Structure:应用程序结构
Basic:是基础的结构,一般不包含中间件(RTOS、文件系统、USB设备等)
Advanced:相反就是包含中间件,一般针对相对复杂一点的工程。
Toolchain/IDE:根据你用的编译软件进行选择 使用KEIL就选择keil的对应版本。不要高于版本其他默认。
1.copy all used libraries into the project folder:
复制所有库文件(不管工程需要用到还是没用到)到生成的工程目录中,此做法可以使在不使用Cubemx或者电脑没有安装cubemx,依然可以按照标准库的编程习惯调用HAL库函数进行程序编写。2.Copy only the necessary library files:
只复制必要的库文件。这个相比上一个减少了很多文件。比如你没有使用CAN、SPI…等外设,就不会拷贝相关库文件到你工程下。3.Add necessary library files as reference in the toolchain project configuration file :
在工具链项目配置文件中添加必要的库文件作为参考。这里没有复制HAL库文件,只添加了必要文件(如main.c)。相比上面,没有Drivers相关文件。4.Generate peripheral initialization as a pair of’.c/.h’ files per peripheral:
每个外设生成独立的.C .H文件,方便独立管理。不勾:所有初始化代码都生成在main.c
勾选:初始化代码生成在对应的外设文件。 如UART初始化代码生成在uart.c中。
5. Backup previously generated files when re-generating:
在重新生成时备份以前生成的文件。重新生成代码时,会在相关目录中生成一个Backup文件夹,将之前源文件拷贝到其中。
6. keep user code when re-generating:
重新生成代码时,保留用户代码(前提是代码写在规定的位置。也就是生成工程文件中的BEGIN和END之间。否则同样会删除。后面会根据生成的工程进行说明)7.delete previously generated files when not re-generated:
删除以前生成但现在没有选择生成的文件
比如:之前生成了led.c,现在重新配置没有led.c,则会删除之前的led.c文件。(此功能根据自身要求进行取舍)
二, Clion进行 [LOOP] 编写
1.函数介绍
1、串口发送/接收函数
//串口发送数据,使用超时管理机制
HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
//串口接收数据,使用超时管理机制
HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
//串口中断模式发送
HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
//串口中断模式接收
HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
//串口DMA模式发送
HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
//串口DMA模式接收
HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
2、串口发送函数实例
HAL_UART_Transmit(&huart1, (uint8_t *)"hello world!\r\n", 14 , 0xffff);
2.SETUP&LOOP
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
//HAL库初始化
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
//系统时钟配置
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
//GPIO引脚初始化
MX_GPIO_Init();
//USART串口初始化
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
HAL_UART_Transmit(&huart1, (uint8_t *)"hello world!\r\n", 14 , 0xffff);
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
三, OPENOCD上传
点击此处上传,在ST-LINK连接正常后,会自动匹配开发板,并提示开发板固件下载完成。
此处有三个功能,分别是:编译
上传
调试
四, 串口监视
串口设置后,打开串口监视
通信成功
贰,串口通信输出DHT11温湿度
一.添加DHT11库文件
一定注意添加库文件时千万不要在Clion里右键创建,Clion这里很傻,会把添加的文件自动写进Cmakerlist的链接里,修改起来很麻烦,建议在资源管理器里添加