学习笔记——STM32F103V3版本——HC-05模块控制数码管

news2025/1/12 10:54:49

一.硬件

1.HC-05模块

2.数码管

3.连接硬件

二.在keil5中的代码

main.c代码:
 

#include "stm32f10x.h"
#include "buletooth.h"
#include "led.h"
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "exti.h" 

void SystemClock_Config(void);
void GPIO_Init(void);
void UART_Init(void);

int main(void)
{
    
      Stm32_Clock_Init(9);    //³õʼ»¯ÏµÍ³Ê±ÖÓΪ72MHZ
    delay_init(72);         // ³õʼ»¯ÑÓʱº¯Êý
    uart_init(72, 9600);    // ³õʼ»¯´®¿Ú£¬²¨ÌØÂÊΪ9600
    SystemClock_Config();
    GPIO_Init();
    UART_Init();
    LED_Init(); 
    EXTI_Init(); 
    
    
    while (1)
    {
        BlueTooth_Process();
    }
}

void SystemClock_Config(void)
{
    
    RCC->CR |= RCC_CR_HSEON;
    while (!(RCC->CR & RCC_CR_HSERDY));
    
    FLASH->ACR = FLASH_ACR_PRFTBE | FLASH_ACR_LATENCY_2;
    
    RCC->CFGR |= RCC_CFGR_HPRE_DIV1 | RCC_CFGR_PPRE2_DIV1 | RCC_CFGR_PPRE1_DIV2;
    RCC->CFGR |= RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL9;
    RCC->CR |= RCC_CR_PLLON;
    while (!(RCC->CR & RCC_CR_PLLRDY));
    
    RCC->CFGR |= RCC_CFGR_SW_PLL;
    while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_PLL);
}

void GPIO_Init(void)
{
    RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_AFIOEN;
    uint32_t shiftPA9 = 9 * 4;
    uint32_t shiftPA10 = 10 * 4;   
    GPIOA->CRH &= ~((0xF << shiftPA9) | (0xF << shiftPA10));
    GPIOA->CRH |= (0xB << shiftPA9); 
    GPIOA->CRH |= (0x4 << shiftPA10);
}


void UART_Init(void)
{
    RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
    
    USART1->BRR = 0x1D4C; // 9600 baud @ 72 MHz
    USART1->CR1 = USART_CR1_TE | USART_CR1_RE | USART_CR1_UE;
}
 

led.c代码:
 

#include "sys.h"   
#include "led.h"

//³õʼ»¯PA8ºÍPD2µÄÊä³ö¿Ú£¬²¢ÊÇʹÄÜÕâÁ½¸ö¿ÚµÄʱÖÓ
//LED IO³õʼ»¯

void LED_Init(void)
{
    RCC->APB2ENR|=1<<2;    //ʹÄÜPORTAʱÖÓ         
    GPIOA->CRL&=0X00000000; 
    GPIOA->CRL |= 0x33333333; 
    JTAG_Set(SWD_ENABLE);    //¹Ø±ÕJTAG,¿ªÆôSWD
    GPIOA->ODR&=0X00000000;//È«²¿Êä³öµÍµçƽ
}

//ÉèÖÃÿλÊý×ÖÊä³öµÄ¶þ¼«¹Ü״̬
void LED_1(void)
{
    PAout(1)=1;
      PAout(2)=1;
    PAout(0)=1;
    PAout(5)=0;
    PAout(6)=1;
    PAout(7)=1;
    PAout(3)=1;
    PAout(4)=0;
}
void LED_2(void)
{
    PAout(1)=0;
      PAout(2)=1;
    PAout(0)=0;
    PAout(5)=0;
    PAout(6)=0;
    PAout(7)=1;
    PAout(3)=0;
    PAout(4)=1;
}
void LED_3(void)
{
    PAout(1)=0;
    PAout(0)=0;
      PAout(2)=0;
    PAout(5)=1;
    PAout(6)=0;
    PAout(7)=1;
    PAout(3)=0;
    PAout(4)=1;
}
void LED_4(void)
{
    PAout(1)=0;
    PAout(0)=1;
    PAout(5)=1;
    PAout(6)=0;
    PAout(7)=1;
      PAout(2)=0;
    PAout(3)=1;
    PAout(4)=0;
}
void LED_5(void)
{
    PAout(1)=1;
    PAout(0)=0;
    PAout(5)=1;
    PAout(6)=0;
    PAout(7)=1;
    PAout(3)=0;
    PAout(2)=0;
    PAout(4)=0;
}
void LED_6(void)
{
    PAout(1)=1;
    PAout(0)=0;
    PAout(5)=0;
    PAout(6)=0;
    PAout(7)=1;
    PAout(3)=0;
    PAout(4)=0;
      PAout(2)=0;
}
void LED_7(void)
{
    PAout(1)=0;
    PAout(0)=0;
    PAout(5)=1;
    PAout(6)=1;
    PAout(7)=1;
      PAout(2)=0;
    PAout(3)=1;
    PAout(4)=1;
}
void LED_8(void)
{
    PAout(1)=0;
    PAout(0)=0;
      PAout(2)=0;
    PAout(5)=0;
    PAout(6)=0;
    PAout(7)=1;
    PAout(3)=0;
    PAout(4)=0;
}
void LED_9(void)
{
    PAout(1)=0;
    PAout(0)=0;
    PAout(5)=1;
    PAout(6)=0;
    PAout(7)=1;
    PAout(3)=0;
    PAout(4)=0;
      PAout(2)=0;
}


 

buletooth.c

#include "stm32f10x.h"
#include "buleTooth.h"
#include "led.h"


void BlueTooth_Process(void)
{
    if (USART1->SR & USART_SR_RXNE)
    {
        uint8_t data = USART1->DR;
        USART_SendData(data);
       
        switch (data)
        {
            case 1:
                LED_1();
                break;
            case 2:
                LED_2();
                break;
            case 3:
                LED_3();
                break;
            case 4:
                LED_4();
                break;
            case 5:
                LED_5();
                break;
            case 6:
                LED_6();
                break;
            case 7:
                LED_7();
                break;
            case 8:
                LED_8();
                break;
            case 9:
                LED_9();
                break;
            default:
                break;
        }
    }
}

void USART_SendData(uint8_t data)
{
    while (!(USART1->SR & USART_SR_TXE));
    USART1->DR = data;
}


 

exti.c代码:

#include "stm32f10x.h"
#include "led.h"
#include "usart.h"
#include "buletooth.h"

void EXTI_Init(void)
{
    
    RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_AFIOEN;

    
    GPIOA->CRH &= ~(GPIO_CRH_CNF9 | GPIO_CRH_CNF10);
    GPIOA->CRH |= GPIO_CRH_CNF9_1 | GPIO_CRH_MODE9_0;  
    GPIOA->CRH |= GPIO_CRH_CNF10_1;                    

    
    AFIO->EXTICR[2] &= ~(AFIO_EXTICR3_EXTI9 | AFIO_EXTICR3_EXTI10);
    AFIO->EXTICR[2] |= AFIO_EXTICR3_EXTI9_PA | AFIO_EXTICR3_EXTI10_PA;

   
    EXTI->IMR |= EXTI_IMR_MR9 | EXTI_IMR_MR10;
    EXTI->FTSR |= EXTI_FTSR_TR9 | EXTI_FTSR_TR10; 

 
    NVIC_SetPriority(EXTI9_5_IRQn, 2);
    NVIC_EnableIRQ(EXTI9_5_IRQn);
    NVIC_SetPriority(EXTI15_10_IRQn, 2);
    NVIC_EnableIRQ(EXTI15_10_IRQn);
}


void EXTI9_5_IRQHandler(void)
{
  
    if (EXTI->PR & EXTI_PR_PR9)
    {
        EXTI->PR |= EXTI_PR_PR9; 

        
        if (USART1->SR & USART_SR_RXNE)
        {
            uint8_t data = USART1->DR;

            
            switch (data)
            {
                case 1:
                    LED_1();
                    break;
                case 2:
                    LED_2();
                    break;
                case 3:
                    LED_3();
                    break;
                case 4:
                    LED_4();
                    break;
                case 5:
                    LED_5();
                    break;
                case 6:
                    LED_6();
                    break;
                case 7:
                    LED_7();
                    break;
                case 8:
                    LED_8();
                    break;
                case 9:
                    LED_9();
                    break;
                default:
                  
                    break;
            }
        }
    }
}


void EXTI15_10_IRQHandler(void)
{
    
    if (EXTI->PR & EXTI_PR_PR10)
    {
        EXTI->PR |= EXTI_PR_PR10; 

        
        if (USART1->SR & USART_SR_RXNE)
        {
            uint8_t data = USART1->DR; 

            switch (data)
            {
                case 1:
                    LED_1();
                    break;
                case 2:
                    LED_2();
                    break;
                case 3:
                    LED_3();
                    break;
                case 4:
                    LED_4();
                    break;
                case 5:
                    LED_5();
                    break;
                case 6:
                    LED_6();
                    break;
                case 7:
                    LED_7();
                    break;
                case 8:
                    LED_8();
                    break;
                case 9:
                    LED_9();
                    break;
                default:
                   
                    break;
            }
        }
    }
}
 

三.注意事项:

1.在写好程序后,用串口调试助手(XCOM)来进行程序展示,在上传过程中使用PA9和PA10的两个跳线帽来实现蓝牙控制数码管的数字,但这里要将switch……case中的要用'1','2'等来进行控制才能实现相关功能。

2.在蓝牙调试器app(手机上的)中的对话模式中要把两个跳线帽去掉,将引脚PA9来连接HC-05上的RX引脚,PA10来连接HC-05上的TX引脚,这里也要将switch……case中的要用'1','2'等来进行控制才能实现相关功能。

3.在蓝牙调试器app(手机上的)中的专业模式中,则用上述代码即可,用switch……case中的要用1,2等。

图片配置如下:
                             

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1691682.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python实用系列:按顺序重命名文件

啊&#xff0c;好久没更博客了&#xff0c;今天偶然想换个桌面壁纸&#xff0c;于是上网搜了两个比较满意的桌面壁纸&#xff0c;都是压缩包&#xff1a; 当我想要给他们放到我的桌面壁纸文件里的时候患了难&#xff0c;因为他们的名字有相同的&#xff1a; anime文件夹里边&a…

el-select可选择可搜索可输入新内容

需求&#xff1a;el-form-item添加el-select&#xff0c;并且el-select可选择可搜索可输入新内容&#xff0c;并且和其他的el-input做联动&#xff0c;如果是选择&#xff0c;那么el-input自动回填数据并且不可编辑&#xff0c;如果el-select输入新的内容&#xff0c;那么el-in…

js禁止使用浏览器的前进后退按钮的方法

效果图&#xff1a; // 替换当前页面的历史记录&#xff0c;使用户不能通过浏览器的前进后退按钮导航 history.replaceState(null, null, location.href);// 监听浏览器的历史记录变化事件 window.onpopstate function(event) {// 再次替换当前页面的历史记录&#xff0c;确保…

接口使用实例——数组排序

对于基本数据类型的大小比较&#xff0c;我们可以使用<,>,或者equals方法进行比较&#xff0c;但是对象之间如何进行比较呢&#xff1f;要对对象进行比较&#xff0c;我们必须对同一个成员变量进行比较&#xff0c;如我们可以通过比较name的大小来得出两个对象的大小&…

四万字长文详解——node.js使用移动云,EOS对象存储

目录 前言 安装及安装前的操作 前置条件 如何创建认证信息 使用npm安装SDK开发包 安装开发包命令 初始化操作 存储桶 查看结果命令 查看桶列表 查看结果命令 删除桶 查看结果命令 创建桶 获取桶列表 判断桶是否存在 查询桶所属地域 查询桶的访问权限 管理桶的…

前后端 | 低代码平台之 Erupt

前文提要 最近大家是不是都有那种危机感&#xff0c;项目变多了&#xff0c;工时压紧了&#xff0c;老板说&#xff0c;我不管你加不加班&#xff0c;我只看结果&#xff0c;项目经理说&#xff0c;我不管你用什么技术栈&#xff0c;我只要没BUG&#xff0c;测试说&#xff0c…

【算法】分治 - 快速排序

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 引言一、颜色分类二、排序数组三、数组中的第k个数四、最小的k个数总结 引言 本节主要介绍快速排序&#xf…

类图的六大关系

类图中的六大关系包括&#xff1a;继承关系、实现关系、关联关系、聚合关系、组合关系和依赖关系。 1. 继承关系 继承是一种类与类之间的关系&#xff0c;表示一种泛化和特化的关系。子类继承父类的特性和行为。 class Animal {void eat() {System.out.println("This an…

足球走地全自动化操作软件实现过程

本次采用selenium实现自动化操作的流程 打开浏览器录入账号密码等待数据请求&#xff08;监听&#xff09;有新数据&#xff0c;进行自动化操作通过homeName搜索&#xff0c;找到对应数据找到对应的类型&#xff08;让、大小…&#xff09;找到对应的盘口输入数量提交 附登录…

系统资源监控器工具glances的使用详解

目录 1、glances工具介绍 2、安装方式 3、glances的工具界面说明 4、常用的参数选项 5、常用快捷键说明 1、glances工具介绍 glances可以分析系统的 CPU使用率、内存使用率、内核统计信息和运行队列信息磁盘I/O速度、传输和读/写比率、磁盘适配器网络I/O速度、传输和读/写…

华为编程题目(实时更新)

1.大小端整数 计算机中对整型数据的表示有两种方式&#xff1a;大端序和小端序&#xff0c;大端序的高位字节在低地址&#xff0c;小端序的高位字节在高地址。例如&#xff1a;对数字 65538&#xff0c;其4字节表示的大端序内容为00 01 00 02&#xff0c;小端序内容为02 00 01…

电脑远程控制另一台电脑怎么弄?

可以远程控制另一台电脑吗&#xff1f; “你好&#xff0c;我对远程访问技术不太了解。现在&#xff0c;我希望我的朋友可以远程控制我的Windows 10电脑&#xff0c;以便她能帮我解决一些问题。请问&#xff0c;有没有免费的方法可以实现这种远程控制&#xff1f;我该如何操作…

如何选择一个最强大模型-看最硬核排名了!

Chatbot Arena由伯克利大学主导团队 LMSYS Org 发布了一个针对大语言模型的基准平台 Chatbot Arena。该平台采用匿名、随机的方式让不同的大模型产品进行对抗评测&#xff0c;基于国际象棋等竞技游戏中广泛使用的埃洛等级分系统&#xff0c;通过用户投票产生&#xff0c;系统每…

基于SpringBoot的网盘系统设计与实现

第1章 绪论... 1 1.1 研究背景与意义... 1 1.1.1 研究背景... 1 1.1.1 研究意义... 1 1.2 国内外研究现状... 2 1.2.1 国内研究现状... 2 1.2.2 国外研究现状... 3 1.3 论文组织架构... 4 第2章 关键技术介绍... 5 2.1 SpringBoot. 5 2.2 MySQL数据库... 5 2.3 MVC架…

区块链论文总结速读--CCF A会议 USENIX Security 2024 共7篇 附pdf下载

Conference&#xff1a;33rd USENIX Security Symposium CCF level&#xff1a;CCF A Categories&#xff1a;网络与信息安全 Year&#xff1a;2024 Num&#xff1a;7 1 Title: Practical Security Analysis of Zero-Knowledge Proof Circuits 零知识证明电路的实用安全…

对AI 感兴趣的小伙伴

如图&#xff0c;欢迎来玩儿&#xff01; 欢迎来玩儿

备考AMC8和AMC10竞赛,吃透2000-2024年1850道真题和解析(持续)

多做真题&#xff0c;吃透真题和背后的知识点是备考AMC8、AMC10有效的方法之一&#xff0c;通过做真题&#xff0c;可以帮助孩子找到真实竞赛的感觉&#xff0c;而且更加贴近比赛的内容&#xff0c;可以通过真题查漏补缺&#xff0c;更有针对性的补齐知识的短板。 今天我们继续…

嵌入式学习——3——UDP TFTP简易文件传输

tftp协议概述 简单文件传输协议&#xff0c;适用于在网络上进行文件传输的一套标准协议&#xff0c;使用UDP传输 特点&#xff1a; 是应用层协议 基于UDP协议实现 数据传输模式 octet&#xff1a;二进制模式&#xff08;常用&#xff09; mail&#xff1a;已经不再支持 TFTP通信…

ping 探测网段哪些地址被用

#!/bin/bash# 遍历192.168.3.1到192.168.3.254 for i in {1..254} doip"192.168.3.$i"# 对每个IP地址进行三次ping操作if ping -c 3 -W 1 $ip > /dev/null 2>&1thenecho "$ip: yes"fi done$ sh test.sh 192.168.3.1: yes 192.168.3.95: yes 192.…

Terminal Web终端基础(Web IDE 技术探索 二)

Terminal是web终端技术&#xff0c;类似cmd命令窗口&#xff0c;Webcontainer 中推荐使用的是Xterm.js&#xff0c;这里就不细说Xterm.js 的使用了&#xff0c;我们使用第三方库来实现&#xff08;原生确实有点难用&#xff09;。 vue-web-terminal 一个由 Vue 构建的支持多内容…