【硬石STM32f407开发板_DIY入门】模块化编程实例
1. 项目需求
定时6定时通过串口6发送一个数组,带CRC校验,参考如下
0x01,0x02,0x03,crc_h,crc_l,
baudrate=9600bps。
CPU:stm32f407vg
2. 开发环境
硬件平台:硬石STM32f407开发板
在IAR环境下使用cubeMX辅助生成初始化代码
3. 要求
- 把CRC校验部分使用模块化编程的思路和main.c分开。在一个main.c中写程序写惯了,所以不管三七二十一,把所有代码都放在一起。现在都分开。
- 顺便把在it中编写IRQHandler函数,而不用放在main.c中的问题一起解决。
4. 实现步骤
4.1. 新建文件夹
4.2. 配置时钟树
4.3. 配置定时器
4.4. 配置RCC
4.5. 配置串口
4.6. 配置NVIC
4.7. 生成工程
5. 工程创建之后
5.1新建文件与文件夹
在文件夹中新建一个自己的文件夹存储c文件和h文件,先建立一个母文件夹UserDefineFilename,然后在文件夹中建一个source文件夹和header文件夹。
5.2在开发环境中新增头文件的存储路径
5.3 编辑代码
在it.c中增加变量定义
/* USER CODE BEGIN 0 */
#include "stdbool.h"/*一定要在cubeMX生成的user code 用户代码中添加代码*/
unsigned int tim6_cnt;/*定时器6计时变量*/
extern bool tim6_flag;/*定时时间到*//* USER CODE END 0 */
在main.c中增加
/* USER CODE BEGIN Includes */
#include "stdbool.h"
#include "CRC.h"
bool tim6_flag;/*定时时间到*/
unsigned char tx6[5]={0x01,0x02,0x03};
/* USER CODE END Includes */
编辑定时器6全局中断中的代码
/**
* @brief This function handles TIM6 global interrupt, DAC1 and DAC2 underrun error interrupts.
*/
void TIM6_DAC_IRQHandler(void)
{/* USER CODE BEGIN TIM6_DAC_IRQn 0 *//* USER CODE END TIM6_DAC_IRQn 0 */HAL_TIM_IRQHandler(&htim6);/* USER CODE BEGIN TIM6_DAC_IRQn 1 */tim6_cnt++;if(tim6_cnt==1000){tim6_cnt=0;tim6_flag=1;}/* USER CODE END TIM6_DAC_IRQn 1 */
}
在工程中新增group,大家喜欢命名为bsp(板级支持代码)
新建c文件,并添加代码,此文件保存在之前定义的source文件夹中,并将此c文件添加到bsp中
#include "CRC.h"
extern void Calculate_CRC(unsigned char *P,unsigned char MessageLenth)/*别忘了extern*/
{unsigned char Carry,n;CRC_L=0xff;CRC_H=0xff;while(MessageLenth--){CRC_L=CRC_L^(*P);for(n=0;n<8;n++){Carry=CRC_L&1;CRC_L>>=1;if(CRC_H & 0x01) CRC_L=CRC_L|0x80; CRC_H>>=1;if(Carry){CRC_L^=0x01;CRC_H^=0xa0;}}P++;}return;
}
新建h文件,并添加代码,此文件保存在之前定义的header文件夹中
#ifndef __CRC_H
#define __CRC_H
extern unsigned char CRC_L,CRC_H;//串口6接收,因为外部要使用,所以前面加externextern void Calculate_CRC(unsigned char *P,unsigned char MessageLenth);// ,因为外部要使用,所以前面加extern
#endif /* __CRC_H */
增加所有新增h文件的存储路径,这里就一个。
在main.c中增加
/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
unsigned char CRC_L,CRC_H;/*it里面有了,但是这里还要说一下*/
/* USER CODE END PV */
在while(1)之前打开中断
/* USER CODE BEGIN 2 */HAL_TIM_Base_Start_IT(&htim6);//打开定时器6中断/* USER CODE END 2 */
在while(1)中增加
if(tim6_flag){tim6_flag=0;Calculate_CRC(tx6,3);tx6[3]=CRC_H;tx6[4]=CRC_L;HAL_UART_Transmit(&huart6,tx6,5, 0xffff);
}
6.验证结果
【硬石STM32f407开发板_DIY入门】模块化编程实例相关推荐
- 硬石YS-F1Pro开发板HAL库例程持续更新\2. 软件设计之高级裸机例程(HAL库版本)\YSF1_HAL-121. MH-Z14A二氧化碳传感器模块
/** ****************************************************************************** * ...
- 使用gpio输出驱动蜂鸣器出现破音_探索者 STM32F407 开发板资料连载第七章 蜂鸣器实验...
1)实验平台:探索者 STM32F407 开发板 2)摘自<STM32F4 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第七章 蜂鸣器实验 上一章,我们介绍了 ...
- 【STM32-V5】STM32F407开发板开源, 丰富软件资源, 强劲硬件配置, 配套600实例, 20套手册带视频教程2023-05-15
从2013年5月份发布至今,开发板硬件更新过6个版本,软件资料更新过136次.当前标准库最新版本V9.2,HAL库最新版本V5.6 安富莱微信公共平台,欢迎大家关注(打造高质量公众号). ====== ...
- 基于原子探索者stm32f407开发板的ucos-iii+lwip1.4.1的tcp server并发服务器完美解决例程(转)...
源:基于原子探索者stm32f407开发板的ucos-iii+lwip1.4.1的tcp server并发服务器完美解决例程 转载于:https://www.cnblogs.com/LittleTig ...
- stm32f407 6路串口dma如何配置_stm32cubeMX学习十、扫码模块程序开发(基于正点原子STM32F407开发板)...
本程序编写基于正点原子STM32F407开发板. 本文使用的扫码模块是下面这个品牌. 扫码模块的应用场景非常广泛,我们可以上百度搜索一下: 等等. 今天就来说说如何在开发板上实现控制它吧,打开数据手册 ...
- 国产超低功耗华大单片机HC32L136开发板上手入门
今天介绍下国产超低功耗华大单片机HC32L136开发板上手后的入门操作(开发板可以在华大MCU应用交流群:164973950 免费申请).HC32L136开发板(如下图所示)分为板载调试模块(左半部分 ...
- 国产超低功耗华大单片机HC32F003开发板上手入门
今天介绍下国产超低功耗华大单片机HC32F003开发板上手后的入门操作(开发板可以在华大MCU应用交流群:164973950 免费申请).HC32F003开发板(如下图所示)分为板载调试模块(左半部分 ...
- 国产超低功耗华大单片机HC32L110开发板上手入门
今天介绍下国产超低功耗华大单片机HC32L110开发板上手后的入门操作(开发板可以在华大MCU应用交流群:164973950 免费申请).HC32L110开发板(如下图所示)分为板载调试模块(左半部分 ...
- 国产超低功耗华大单片机HC32F005开发板上手入门
今天介绍下国产超低功耗华大单片机HC32F005开发板上手后的入门操作(开发板可以在华大MCU应用交流群:164973950 免费申请).HC32F005开发板(如下图所示)分为板载调试模块(左半部分 ...
- USB2DEMON烧录DBAU1200开发板flash入门教程
//======================================================================== //TITLE: // USB2DEMON烧 ...
最新文章
- 使用Git上传项目到码云仓库
- android自定义控件绘制位置,Android自定义控件之——文字圆形边框(将文字绘制在圆中间)...
- 《大话数据结构》第9章 排序 9.2 排序的基本概念与分类
- 论文笔记 《Selective Search for Object Recognition》
- python01_python简介
- java const string_深入研究Java String
- Tomcat应用中post方式传参数长度限制
- leecode62 不同路径
- LeetCode 199. 二叉树的右视图(DFS 按层queue)
- java instanceof 继承_Java中的instanceof关键字
- JavaScript学习笔记 -- ES6学习(三) 变量的解构赋值
- 41.Linux/Unix 系统编程手册(下) -- 共享库基础
- IE不支持 Promise 解决办法
- Cesium笔记之加载GIF图
- 计算机u盘管理软件,电脑U盘管理工具、计算机U盘管理软件、U盘控制软件的使用.doc...
- 再见安卓 你好鸿蒙,再见华为,你好鸿蒙
- java编程细节总结(一):等于号的作用
- 服务注册与发现-全搞懂
- 分类信息网和织梦搬家后报错Fatal error: Uncaught ArgumentCountError: Too few arguments to function AddFilter(), 3
- 少儿编程培训发展的重要趋势