keil接收别人发的工程打不开_STM32CubeMX6.0 + HAL + LittleVGL7.6 等学习[最全附工程源码]

366dac596156ccc5817b57ed6d0f337c.png

STM32CubeMX + HAL一些说明底层配置Cube基本使用HAL库函数中断回调函数外设对应时钟配置示例小编有话说USARTRTCSDIO + FATFSSDRAMLTDC + DMA2DFreeRTOSTouchGFX显示LittleVGL待补充...

STM32CubeMX + HAL

一些说明

底层配置

使用STM32CubeMX代码生成工具,不用关注底层配置的细节,真舒服。

使用教程:

https://sxf1024.lanzoui.com/b09rf2dwj 密码:bgvi

虽然Cube+HAL很舒服,但新手不建议用。最好还是先去学一下标准库怎么用,有个大致概念后,再来学这一套。


Cube基本使用

  1. 新建工程
  2. 选择芯片
  3. Pinout&Configuration,选择RCC(HSE:Crystal/Ceramic Resonator)SYS(Debug:Serial Wiire)
  4. Clock Configuration,配置时钟树

92cfaea9b64653a38c5cebc69efadb57.png
  1. Project Manager,配置工程输出项

9b6f25a86f48c1dc3dd1a3bcecbe6fa7.png
  1. Pinout&Configuration,选择功能(若是选GPIO相关,可以直接在Pinout view选择;若是其他功能,可以在左边Categories打开,会自动配置引脚)、设置Parameter Settings/NVIC

7f920808e1b5b1774baaa83c7e00303e.png
  1. GENERATE CODE,生成工程,用KEIL打开编辑

HAL库函数

  • 函数形式:均以HAL_开头
  • 寻找过程:在驱动文件stm32f4xx_hal_XXX.c或其.h文件中找函数定义,一般在靠后位置
  • 其他说明:
    • HAL库并没有把所有的操作都封装成凼数。
    • 对于底层的寄存器操作(如读取捕获/比较寄存器),还有修改外设的某个配置参数(如改变输入捕获的极性),HAL库会使用宏定义来实现。而且会用__HAL_作为这类宏定义的前缀
    • 获取某个参数,宏定义中一般会有_GET;而设置某个参数的,宏定义中就会有_SET
    • 在开发过程中,如果遇到寄存器级别或者更小范围的操作时,可以到该外设的头文件中查找,一般都能找到相应的宏定义。
    • HAL库函数第一个参数一般都是句柄(一个包含了当前对象绝大部分状态的结构体),虽然增加了开销,但是用起来便捷了非常多。

中断回调函数

  • 函数形式:HAL_XXX_XXXCallback()
  • 寻找过程:中断文件stm32f4xx_it.c - > 中断函数XXX_IRQHandler(void) -> HAL库中断函数HAL_XXX_IRQHandler(GPIO_PIN_13) -> 回调函数HAL_XXX_XXXCallback()

外设对应时钟

  1. 随便进入一个外设初始化函数,如MX_GPIO_Init()
  2. 随便进入一个时钟使能函数,如__HAL_RCC_GPIOC_CLK_ENABLE()
  3. 随便进入一个RCC宏定义,如RCC_AHB1ENR_GPIOCEN
  4. 或者直接进入stm32f429xx.h文件
  5. 里面有所有外设与时钟对应关系,如RCC_AHB1ENR_DMA1EN

配置示例

小编有话说

  • 例子源码:https://sxf1024.lanzoui.com/b09rf535a 密码:bf5q
  • 如果配置过程中,参数不知道怎么设置,可以去标准库例程(如野火、正点原子)中看对应的参数是什么
  • Cube软件只是帮你配置了底层,一些初始化代码还是需要自己手动加的,如SDRAM充电初始化、读写函数等
  • 以下内容都是基于“野火F429IGT6挑战者V2开发板”,其他板子按照原理图改改引脚都能用的

USART

源码链接:

https://sxf1024.lanzoui.com/b09rf535a 密码:bf5q

详细教程网上挺多,配置也简单,只要勾选一下USARTx,再开一下中断就行。

693f51ea01cd85c6f9bccd6efb340339.png

在Keil就比较要注意了。

由于每次接收完,程序内部自动把接收中断关了,所以每次要手动打开。

总的来说,加这几部分:

  • main函数中,while之前:
 // 使能串口中断接收
 HAL_UART_Receive_IT(&huart1, (uint8_t*)&DataTemp_UART1, 1);
  • 任意位置添加printf重定向函数
 #include "stdio.h"
 int fputc(int ch, FILE *f){
    
     HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, 0XFF);
     return ch;
 }
  • 任意位置添加中断回调函数
 #define UART1BuffLen 200
 extern uint8_t DataBuff_UART1[UART1BuffLen];
 extern uint32_t DataTemp_UART1;
 extern uint16_t DataSTA_UART1;
 ​
 uint32_t DataTemp_UART1;
 uint8_t DataBuff_UART1[UART1BuffLen];
 uint16_t DataSTA_UART1;
 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
 {
    
   if(huart->Instance == USART1){
    
     if(DataSTA_UART1 < UART1BuffLen){
    
         if(DataTemp_UART1 == 0x0A && DataSTA_UART1>0 && DataBuff_UART1[DataSTA_UART1-1]==0X0D){
    
             printf("USART: %srn", DataBuff_UART1);
             DataSTA_UART1 = 0;
         }
         else{
    
             if(DataSTA_UART1 == 0){
    
                 memset(DataBuff_UART1, 0, sizeof(DataBuff_UART1));
             }
             DataBuff_UART1[DataSTA_UART1++] = DataTemp_UART1;
         }
     }
     // 使能串口中断接收
     HAL_UART_Receive_IT(&huart1, (uint8_t*)&DataTemp_UART1, 1);
   }
 }

RTC

54a0ee214c4b39710d71b3ac979fbe1f.png

67c576daeef0093623f631541874c4f8.png

99ad5a1e4b8ada4a5ff1757b97ff3cf7.png

852235e1e3f1365c9cfd5b964cfd5eb2.png
 RTC_DateTypeDef s
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Keil5万年历源代码是一段程序代码,用于编写和实现一个可在Keil5软件中实现的万年历功能。万年历是一种可以显示任何年份和月份的日历,并且能够显示每个日期的详细信息,如星期几、节假日等。 关于Keil5万年历源代码的具体实现细节,可以考虑以下几点: 首先,该源代码需要定义一些变量和数据结构,用来存储和表示日期和日历信息。例如,可以设计一个日期结构体,包含年、月、日等字段。 其次,代码需要实现一个日期计算函数,用来计算某一年某一月的日历信息,包括每个日期对应的星期几、是否是节假日等。这可以通过使用日期和时间相关的库函数来实现。 然后,代码可以使用 printf 函数等来输出日历信息,使用户可以看到具体的日期和相关信息。也可以考虑使用图形界面或者文本界面来显示日历,并提供一些交互功能,如跳转到指定日期、切换月份等。 最后,为了提高代码的可读性和可扩展性,可以根据需要编写一些辅助函数,用来处理日期格式、计算星期几、判断节假日等。此外,还可以考虑使用注释来解释代码的作用和实现思路。 综上所述,Keil5万年历源代码是一段实现万年历功能的程序代码,通过使用日期和时间相关的库函数以及自定义的变量和数据结构,计算和显示特定年份和月份的日历信息。这段代码可以作为一个简单的日历功能程序的基础,可以根据实际需要进行拓展和优化。 ### 回答2: Keil5万年历源代码是为Keil工具编写的一个程序,它的功能是提供万年历的相关查询和显示功能。 源代码的主要部分包括了日期计算、数据显示和用户交互等模块。其中,日期计算模块负责根据用户输入的年份和月份,计算出对应的月历信息。数据显示模块将计算得到的月历信息进行格式化和展示,使用户可以清晰地看到每个月的日期、星期和节气等信息。用户交互模块允许用户通过键盘或鼠标进行操作,比如切换到上个月或下个月的月历。 源代码还包括了一些辅助函数和数据结构,用于支持日期计算和数据显示。比如,可以使用函数来判断某一年是否是闰年,以及计算某一年某个月的天数等。还可以使用数据结构来存储和管理计算得到的月历信息,以便于后续的显示和处理。 此外,源代码还可能包括了一些注释和错误处理机制,以提高程序的可读性和健壮性。注释用于解释源代码中的关键部分和算法,使其他开人员能够更容易地理解和修改代码。错误处理机制包括对用户输入的合法性进行检查,以及对异常情况的处理,使程序在运行过程中能够更加稳定和可靠。 总的来说,Keil5万年历源代码是一个完整的程序,包含了各种功能模块、辅助函数和数据结构,通过编译和运行这个源代码,可以实现万年历的查询和显示功能。 ### 回答3: Keil 5万年历源代码是一套用于计算万年历的程序代码。它基于Keil 5集成开环境(IDE),以C语言进行开Keil 5万年历源代码主要包含了计算闰年、计算某年某月的天数、计算某年某月某日是星期几等功能。 首先,Keil 5万年历源代码会使用闰年判断函数,根据公历的规则来判断某年是否是闰年。闰年的判断规则按照如下方式进行计算:如果年份能被4整除但不能被100整除,或者年份能被400整除,则为闰年。 接着,代码中会使用函数来计算某年某月的天数。根据公历的规则,每个月的天数是固定的,但2月份的天数会受到闰年的影响。所以在计算特定月份的天数时,除了对2月份特别处理之外,其他月份的天数都可以直接确定。 最后,代码会通过一系列的计算,来确定某年某月某日是星期几。这里使用了蔡勒(Zeller)公式来计算。公式是根据基姆拉尔森(Kim Larsen)所提供的算法,能够根据日期来计算出星期几。 总的来说,Keil 5万年历源代码是一个方便、灵活、高效的程序,可以实现万年历的功能。通过适当的调用和计算,可以得到某个日期的具体信息,如是星期几、是哪一天等。这样的源代码可以在许多需要使用万年历功能的应用中得到应用,如日历软件、计算器等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值