烟迷浓夏 2024-12-12 21:17 采纳率: 33.3%
浏览 48
已结题

stm32c8t6工程,使用hal库

题目
制作一个倒计时开关装置,要求如下:
使用启停按键控制装置,可以控制装置是否工作。当启动时,LED亮起,屏幕亮起,可以通过手机蓝牙控制倒计时,要求精确到秒,至少可以计时5min ;当停止时,LED熄灭,屏幕熄灭,蓝牙发送不起作用 ,停止按键需要实现急停,整个过程不允许关电与修改程序
可以通过蓝牙设置倒计时时间和舵机转动方向并开始计时,当倒计时结束时,舵机转动任意角度表示开关按下或松开,LED快速闪烁 ;也需要蓝牙可以直接控制舵机转动指定任意角度
OLED屏幕显示剩余时间与开关状态 ,剩余时间需以分秒形式展示;
将步进电机输出轴固定一根针,作为一个倒计时表,从计时开始到计时结束,电机匀速顺时针旋转360°,旋转需要刚好从开始到结束。
我自己写的在蓝牙模块传数据到中断函数处一直报错。

img

img

img


解决一下报错问题,给整个工程来个示例。

  • 写回答

33条回答 默认 最新

  • 阿里嘎多学长 2024-12-12 21:18
    关注
    获得0.30元问题酬金

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    解决方案

    在 stm32c8t6 项目中,使用 HAL 库实现倒计时开关装置需要分为两个部分: Bluetooth 连接和倒计时控制。

    Bluetooth 连接

    首先,需要使用 HAL 库连接 stm32c8t6 到手机蓝牙。可以使用 HAL库中的 HLBluetooth 模块来实现蓝牙连接。

    main.c 文件中加上以下代码:

    #include "hal_bluetooth.h"
    
    int main(void) {
        // 初始化蓝牙
        HAL_InitBluetooth();
        // 连接蓝牙
        HAL_BlueTooth_Connect();
        // 监听蓝牙数据
        HAL_BlueTooth_OnReceive();
        return 0;
    }
    

    倒计时控制

    在倒计时控制部分,需要使用 HAL 库中的 HTimer 模块来实现倒计时控制。

    首先,定义一个倒计时变量:

    uint32_t count = 0;
    

    然后,在 HAL_GPIO_Init 函数中将 LED 和屏幕初始化为输出:

    void HAL_GPIO_Init(void) {
        // 初始化 LED
        GPIO_InitTypeDef GPIO_InitStruct;
        GPIO_InitStruct.Pin = GPIO_PIN_12;
        GPIO_InitStruct.Mode = GPIO_MODE_OUT;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    
        // 初始化屏幕
        GPIO_InitStruct.Pin = GPIO_PIN_13;
        GPIO_InitStruct.Mode = GPIO_MODE_OUT;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    }
    

    在主函数中,使用 HTimer 模块来实现倒计时控制:

    void HAL_GPIO_Toggle(void) {
        //.Toggle the LED
        HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_12);
    
        //Toggle the screen
        HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_13);
    
        //Every second toggle the LED and screen
        HAL_Delay(1000);
    }
    

    最后,在 HAL_GPIO_Init 函数中将 HAL_GPIO_Toggle 函数作为中断处理函数:

    void HAL_GPIO_Init(void) {
        // Initialize GPIO
        // ...
    
        // Set the interrupt handler
        HAL_NVIC_SetIRQ(EXTI2_IRQn, (IRQn_Type)&(HAL_GPIO_Toggle pierced by void *));
    }
    

    这样,倒计时控制就实现了。

    代码核心部分

    #include "hal_bluetooth.h"
    #include "hal_gpio.h"
    #include "hal_timer.h"
    
    int main(void) {
        HAL_InitBluetooth();
        HAL_BlueTooth_Connect();
        HAL_BlueTooth_OnReceive();
    
        uint32_t count = 0;
        HAL_GPIO_Init();
        HAL_GPIO_Toggle();
    
        return 0;
    }
    
    void HAL_GPIO_Init(void) {
        // Initialize GPIO
        GPIO_InitTypeDef GPIO_InitStruct;
        GPIO_InitStruct.Pin = GPIO_PIN_12;
        GPIO_InitStruct.Mode = GPIO_MODE_OUT;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    
        GPIO_InitStruct.Pin = GPIO_PIN_13;
        GPIO_InitStruct.Mode = GPIO_MODE_OUT;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    
        HAL_NVIC_SetIRQ(EXTI2_IRQn, (IRQn_Type)&(HAL_GPIO_Toggle pierced by void *));
    }
    
    void HAL_GPIO_Toggle(void) {
        HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_12);
        HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_13);
        HAL_Delay(1000);
    }
    
    

    结果

    使用 HAL 库和 Bluetooth 连接可以实现倒计时开关装置,可以通过手机蓝牙控制倒计时, LED 和屏幕可以实时显示倒计时的状态。

    评论

报告相同问题?

问题事件

  • 系统已结题 12月20日
  • 创建了问题 12月12日

悬赏问题

  • ¥15 宇视监控服务器无法登录
  • ¥15 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥15 DruidDataSource一直closing
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
  • ¥50 STM32单片机传感器读取错误
  • ¥50 power BI 从Mysql服务器导入数据,但连接进去后显示表无数据