FPGA——HC-05蓝牙串口实验

    科技2022-07-17  111

    HC-05蓝牙模块

    买来的模块背面就长这样子,总共有六个引脚,实际只用四个脚(RXD、TXD、GND和VCC)就可以进行数据的收发,以默认的9600bps的波特率,由于目前项目对速度要求不高,因此也没有深入研究AT指令等。 关于蓝牙模块的协议其实就是一个串口协议,在蓝牙配对成功后,就相当于以无线的方式进行串口通信。关于串口协议可参考我之前的一篇博客:串口回环

    蓝牙串口实验

    做这个实验的目的就是更好地理解蓝牙即串口这个概念。实验的思路框图如下:

    思路很简单,用一组传统的uart串口连接PC,HC-05连接一台手机。当通过连接PC的uart给FPGA发送数据时,把这个收到的数据发到HC-05的发送模块,通过hc05_tx输出到蓝牙模块;而当手机端发给HC-05数据时,会通过rx_hc05模块接收到数据,再把这个数据送到串口发送模块tx_uart和数码管显示模块smg_disp,同步显示在数码管上。这样,我们就将FPGA作为通道,间接实现了PC与手机端的通信。

    顶层模块

    module bluetooth( input clk , input reset , input hc05_rx , input uart_rx , output logic hc05_tx , output logic uart_tx , output logic [ 7:0] seg_sel , output logic [ 6:0] seg_ment ); logic [ 7:0] data ; logic data_vld ; logic [ 7:0] rx_data ; logic rx_vld ; /* auto_tx auto_tx_inst ( .clk (clk ), .reset (reset ), .data (data ), .data_vld (data_vld ) ); */ tx tx_inst_hc05 ( .clk (clk ), .reset (reset ), .rx_vld (data_vld ), .rx_data (data ), .tx (hc05_tx ) ); tx tx_inst_uart ( .clk (clk ), .reset (reset ), .rx_vld (rx_vld ), .rx_data (rx_data ), .tx (uart_tx ) ); rx rx_inst_hc05 ( .clk (clk ), .reset (reset ), .rx (hc05_rx ), .rx_data (rx_data ), .rx_vld (rx_vld ) ); rx rx_inst_uart ( .clk (clk ), .reset (reset ), .rx (uart_rx ), .rx_data (data ), .rx_vld (data_vld ) ); smg_disp smg_disp_inst ( .clk (clk ), .reset (reset ), .rx_data (rx_data ), .data_vld (rx_vld ), .seg_sel (seg_sel ), .seg_ment (seg_ment ) ); endmodule

    从我顶层模块例化的模块可以看出,不管是uart还是hc05的tx和rx模块,例化的都是同一个原模块,只是输入输出变了而已,这样还是验证一句话:蓝牙即串口。

    上板验证

    在连接hc-05模块时要特别注意RXD和TXD引脚的连接,模块上标出的TXD引脚是模块的输出脚,是FPGA的输入,因此对应hc05_rx脚,而模块的RXD是作为FPGA的输出,因此对应hc05_tx脚,注意不要接反了。

    所需软件:友善串口调试助手、SPP蓝牙串口。

    首先,通过串口调试助手发送66给FPGA,按照我们的设计,连上hc_05的手机端会收到66(数据都是16进制)。然后手机端通过app发送88给FPGA,这时PC上的串口调试助手会收到88这个数据,并且数码管显示88。 实验成功,所以蓝牙只是串口的另外一种形式,它遵循的还是串口协议。 附上源码,有兴趣的朋友可以下载 蓝牙串口源码

    Processed: 0.009, SQL: 8