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

一.硬件

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等。

图片配置如下:
                             

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【计算机毕业设计】基于SSM+Vue的线上旅行信息管理系统【源码+lw+部署文档】

目录 摘 要 第1章 绪论 1.1背景及意义 1.2 国内外研究概况 1.3 研究的内容 第2章 相关技术 2.1 Java简介 2.2 SSM三大框架 2.3 MyEclipse开发环境 2.4 Tomcat服务器 2.5 MySQL数据库 第3章 系统分析 3.1 需求分析 3.2 系统可行性分析 3.2.1技术可行性&#xff1a;技术背景 …

aws eks集成wasm运行时并启动pod

参考资料 WebAssembly 在云原生中的实践指南&#xff0c;https://cloud.tencent.com/developer/article/2324065 作为一种通用字节码技术&#xff0c;wasm的初衷是在浏览器中的程序实现原生应用性能。高级语言将wasm作为目标语言进行编译并运行在wasm解释器中。和nodejs类似的…

大模型主流 RAG 框架TOP10

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 总结链接…

大规模语言模型的书籍分享

在当今人工智能领域&#xff0c;大规模语言模型成为了研究和应用的热点之一。它们以其大规模的参数和强大的性能表现&#xff0c;推动着机器学习和深度学习技术的发展。对于GPT 系列大规模语言模型的发展历程&#xff0c;有两点令人印象深刻。 第一点是可拓展的训练架构与学习范…

2024年国内最全面最前沿人工智能理论和实践资料

引言 【导读】2024第11届全球互联网架构大会圆满结束。会议邀请了100余位行业内的领军人物和革新者&#xff0c;大会通过主题演讲、实践案例分享&#xff0c;以及前瞻性的技术讨论&#xff0c;探索AI技术的边界。 近日&#xff0c;备受瞩目的第十一届全球互联网架构大会&#x…

2024.05.28学习记录

1. 小林coding 计网复习 2.代码随想录刷题. 图论.和复习数组.链表 3.rosebush完成select组件

第十四届蓝桥杯c++研究生组

A 关键思路是求每个十进制数的数字以及怎么在一个数组中让判断所有的数字次数相等。 求每个十进制的数字 while(n!0){int x n%10;//x获取了n的每一个位数字n/10;}扩展&#xff1a;求二进制的每位数字 &#xff08;注意&#xff1a;进制转换、1的个数、位运算&#xff09; x…

单元测试的实现方式

单元测试的实现方式包括&#xff1a;人工静态检查、动态执行跟踪 人工静态检查 人工静态检查是一种单元测试实现方式&#xff0c;它主要依赖开发人员的人工代码审查和静态分析工具来识别潜在的代码问题。 代码审查&#xff1a;开发人员通过仔细检查代码来发现潜在的问题。他…

Warning: Each child in a list should have a unique “key“ prop.

问题描述&#xff1a; 使用ProTable的时候&#xff0c;报错如下 原因分析&#xff1a; 根据报错内容可以分析出&#xff0c;表格数据缺少唯一key&#xff0c; <PaginationTablecolumns{columns}pagination{{pageSize: 10,current: 1,showSizeChanger: true,showQuickJum…

最新!!2024年上半年软考【中级软件设计师】综合知识真题解析

2024上半年软考考试已经结束了&#xff0c;为大家整理了网友回忆版的软件设计师真题及答案&#xff0c;总共30道题。 上半年考试的宝子们可以对答案预估分数&#xff01;准备下半年考的宝子可以提前把握考试知识点和出题方向&#xff0c;说不定会遇到相同考点的题目&#xff01…

rk3568_semaphore

文章目录 前言1 什么是信号量1.1 信号量API函数2、信号量实验2.1 实验目的2.2函数源码2.3 运行结果图前言 本文记录rk3568开发板的信号量实验 1 什么是信号量 信号量是同步的一种方式,常常用于控制对共享资源的访问。 举个例子:停车场的停车位有100个,这100个停车位就是共…

代码模板,Cookie和Session

目录 代码模板 Cookie的基本使用 概念 Cookie的API public Cookie(String name, String value) 发送Cookie对象到客户端&#xff1a;使用response对象 创建Cookie对象并响应给浏览器 在服务器后端获取Cookie对象 Cookie[]cookiesrequset.getCookies(); Cookie的使用细…

牛!华为《Linux 面试笔记大全》太赞了,完整版PDF 开放下载!

在QQ和微信社群中&#xff0c;我注意到许多人都在寻找一份全面的Linux学习资料。因此&#xff0c;我在这里为大家整理和分类了相关的信息&#xff0c;可以看作是对重点内容的梳理和归纳。 这份《Linux面试笔记》主要分为三大部分&#xff1a;基础篇-进阶篇-高级篇 本书笔记针…

Linux主机连接腾讯云服务器详细配置

硬件条件 当然你要先有一个云服务器&#xff0c;腾讯云比阿里云便宜一点&#xff0c;所以就用腾讯云了 问了师兄买这个98的就行&#xff0c;选择CentOS&#xff0c;不要选Ubuntu&#xff0c;因为 嗯&#xff0c;大概就是这样 编程测试 云服务器当然是作为服务端 server.cpp…

蓝桥杯备赛——DP续【python】

一、小明的背包2 试题链接&#xff1a;https://www.lanqiao.cn/problems/1175/learning/ 输入示例 5 20 1 6 2 5 3 8 5 15 3 3 输出示例 120 问题分析 这题是完全背包&#xff0c;每个物品有无数个&#xff0c;所以对于任意dp[i][j]&#xff08;其表示的意思为选到第i个…

18 - grace数据处理 - 补充 - 地下水储量计算过程分解 - 地表水储量变化Glads水文数据处理

18 - grace数据处理 - 补充 - 地下水储量计算过程分解 - 地表水储量变化 0 引言1 Grace陆地水储量过程整合0 引言 由水量平衡方程可以将地下水储量的计算过程分解为3个部分,第一部分计算陆地水储量变化、第二部分计算地表水储量变化、第三部分计算地下水储量变化。本篇简单介绍…

前端Vue小兔鲜儿电商项目实战Day01

一、项目介绍 1. 项目技术栈 2. 项目规模 3. 项目亮点 4. 课程安排 5. 适合人群 二、Vue3组合式API体验 1. 通过一个Counter案例体验Vue3新引入的组合式API ①Vue2的代码 <template><button click"addCount"> {{ count }}</button> </templ…

嵌入式C语言指针详细解说

各位伙伴大家好,在实现操作系统的控制的时候,经常需要使用到指针,利用这次详细分析一下指针的用法。 C语言指针真正精髓的地方在于指针可以进行加减法,这一点极大的提升了程序对指针使用的灵活性,同时也带来了不小的学习负担。正是因为C语言指针可运算,才奠定了如今C语言…

SQL数据分析常用函数

SQL 中有许多常用的函数&#xff0c;可以用于处理和操作数据。以下是一些常见的SQL 函数&#xff1a; 1. 字符串函数&#xff1a; CONCAT(str1, str2, …): 用于把多个文本字符串合并成一个长字符串(参数中有null时返回null)。 select concat(一起,学, SQL); -- 输出结果:一…