1. 项目需求

定时6定时通过串口6发送一个数组,带CRC校验,参考如下
0x01,0x02,0x03,crc_h,crc_l,
baudrate=9600bps。
CPU:stm32f407vg

2. 开发环境

硬件平台:硬石STM32f407开发板
在IAR环境下使用cubeMX辅助生成初始化代码

3. 要求

  1. 把CRC校验部分使用模块化编程的思路和main.c分开。在一个main.c中写程序写惯了,所以不管三七二十一,把所有代码都放在一起。现在都分开。
  2. 顺便把在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入门】模块化编程实例相关推荐

  1. 硬石YS-F1Pro开发板HAL库例程持续更新\2. 软件设计之高级裸机例程(HAL库版本)\YSF1_HAL-121. MH-Z14A二氧化碳传感器模块

    /**   ******************************************************************************   *             ...

  2. 使用gpio输出驱动蜂鸣器出现破音_探索者 STM32F407 开发板资料连载第七章 蜂鸣器实验...

    1)实验平台:探索者 STM32F407 开发板 2)摘自<STM32F4 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第七章 蜂鸣器实验 上一章,我们介绍了 ...

  3. 【STM32-V5】STM32F407开发板开源, 丰富软件资源, 强劲硬件配置, 配套600实例, 20套手册带视频教程2023-05-15

    从2013年5月份发布至今,开发板硬件更新过6个版本,软件资料更新过136次.当前标准库最新版本V9.2,HAL库最新版本V5.6 安富莱微信公共平台,欢迎大家关注(打造高质量公众号). ====== ...

  4. 基于原子探索者stm32f407开发板的ucos-iii+lwip1.4.1的tcp server并发服务器完美解决例程(转)...

    源:基于原子探索者stm32f407开发板的ucos-iii+lwip1.4.1的tcp server并发服务器完美解决例程 转载于:https://www.cnblogs.com/LittleTig ...

  5. stm32f407 6路串口dma如何配置_stm32cubeMX学习十、扫码模块程序开发(基于正点原子STM32F407开发板)...

    本程序编写基于正点原子STM32F407开发板. 本文使用的扫码模块是下面这个品牌. 扫码模块的应用场景非常广泛,我们可以上百度搜索一下: 等等. 今天就来说说如何在开发板上实现控制它吧,打开数据手册 ...

  6. 国产超低功耗华大单片机HC32L136开发板上手入门

    今天介绍下国产超低功耗华大单片机HC32L136开发板上手后的入门操作(开发板可以在华大MCU应用交流群:164973950 免费申请).HC32L136开发板(如下图所示)分为板载调试模块(左半部分 ...

  7. 国产超低功耗华大单片机HC32F003开发板上手入门

    今天介绍下国产超低功耗华大单片机HC32F003开发板上手后的入门操作(开发板可以在华大MCU应用交流群:164973950 免费申请).HC32F003开发板(如下图所示)分为板载调试模块(左半部分 ...

  8. 国产超低功耗华大单片机HC32L110开发板上手入门

    今天介绍下国产超低功耗华大单片机HC32L110开发板上手后的入门操作(开发板可以在华大MCU应用交流群:164973950 免费申请).HC32L110开发板(如下图所示)分为板载调试模块(左半部分 ...

  9. 国产超低功耗华大单片机HC32F005开发板上手入门

    今天介绍下国产超低功耗华大单片机HC32F005开发板上手后的入门操作(开发板可以在华大MCU应用交流群:164973950 免费申请).HC32F005开发板(如下图所示)分为板载调试模块(左半部分 ...

  10. USB2DEMON烧录DBAU1200开发板flash入门教程

    //======================================================================== //TITLE: //    USB2DEMON烧 ...

最新文章

  1. 使用Git上传项目到码云仓库
  2. android自定义控件绘制位置,Android自定义控件之——文字圆形边框(将文字绘制在圆中间)...
  3. 《大话数据结构》第9章 排序 9.2 排序的基本概念与分类
  4. 论文笔记 《Selective Search for Object Recognition》
  5. python01_python简介
  6. java const string_深入研究Java String
  7. Tomcat应用中post方式传参数长度限制
  8. leecode62 不同路径
  9. LeetCode 199. 二叉树的右视图(DFS 按层queue)
  10. java instanceof 继承_Java中的instanceof关键字
  11. JavaScript学习笔记 -- ES6学习(三) 变量的解构赋值
  12. 41.Linux/Unix 系统编程手册(下) -- 共享库基础
  13. IE不支持 Promise 解决办法
  14. Cesium笔记之加载GIF图
  15. 计算机u盘管理软件,电脑U盘管理工具、计算机U盘管理软件、U盘控制软件的使用.doc...
  16. 再见安卓 你好鸿蒙,再见华为,你好鸿蒙
  17. java编程细节总结(一):等于号的作用
  18. 服务注册与发现-全搞懂
  19. 分类信息网和织梦搬家后报错Fatal error: Uncaught ArgumentCountError: Too few arguments to function AddFilter(), 3
  20. 少儿编程培训发展的重要趋势

热门文章

  1. MD5及pack安装
  2. 轻量级 Visio,绘制程序框图,你值得拥有
  3. matlab 螺纹,关于螺纹边缘提取及参数测量
  4. 国家网络信息安全战略三步曲
  5. python凹多边形分割_直线切割凹多边形
  6. 副屏幕全屏_如何让电脑显示器屏幕显示全屏
  7. hsql导入mysql_转-jira从HSQL迁移到MYSQL
  8. Apache Ranger KMS 部署文档
  9. 用c语言解三角函数公式大全初中,初中三角函数公式大全
  10. linux添加终端快捷键,linux 终端快捷键