• 发文章

  • 发资料

  • 发帖

  • 提问

  • 发视频

创作活动
0
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
返回

电子发烧友 电子发烧友

  • 全文搜索
    • 全文搜索
    • 标题搜索
  • 全部时间
    • 全部时间
    • 1小时内
    • 1天内
    • 1周内
    • 1个月内
  • 默认排序
    • 默认排序
    • 按时间排序
大家还在搜
  • 基于STM32的指纹打卡器设计

    关于制作基于STM32的指纹打卡器(未完成)笔者认为首先需要构思好此打卡器需要实现的功能有哪些?作为一个指纹打卡器首先应该具备指纹识别功能。其次需要将我们识别到的用户反

    2021-08-16 08:39

  • 【开发教程4】AI语音人脸识别(会议记录仪-人脸打卡机)-GPIO

    GPIO GPIO全称General Purpose Input Output即通用的输入输出,是所有控制器里必备的资源,CC3200的所有数字引脚和部分模拟引脚均可作为通用的输入输出引脚(GPIO)使用,CC3200把GPIO分为三个组,分别是GPIOA0、GPIOA1、GPIOA2、GPIOA3,每一组GPIO有8个引脚,引脚分配如表1.0.1所示: 表1.0 .1CC3200引脚分配表 表1 根据功能引脚配置的不同,CC3200最多可以有27个GPIO,且所有的GPIO引脚均具有中断功能,触发的方式支持电平触发和边沿触发(上升沿和下降沿),不仅如此,所有的GPIO都可以用于触发DMA、可作为唤醒源,GPIO引脚可编程:可配置为内部10uA上拉或下拉,驱动能力可调节为:2mA、4mA、6mA、8mA、10mA、12mA、14mA,同样也支持开漏模式。 对GPIO进行操作时,主要需要了解两大寄存器:GPIODATA 寄存器、GPIODIR寄存器。 GPIODATA寄存器是数据寄存器。在软件控制模式下,如果对应的引脚通过 GPIODIR寄存器配置为输出模式,这写到GPIODATA 寄存器中的值会被传到对应引脚输出。GPIODATA 寄存器有256个别名地址,偏移值为0x000到0x3ff。一个不同地址别名可以用来直接读/写任何8个信号位的组合。这个特性可以避免读-改-写和软件读的位掩码的时间消耗。 在该方案中,为了写GPIODATA寄存器,掩码中的对应位对应于总线中[9..2] 位必须被置位。否则在进行写操作时,对应位的值不会被改变。同样,进行读操作时,也是对应总线中的[9..2],在读取对应位时,也必须置位,否则读取为 0。 如果引脚配置为输出模式,则读取GPIODATA寄存器返回最后一次写入的值;如果配置为输入模式则返回对应引脚的值。所有位都可以通过复位清零。 如图1.0.1所示为GPIODATA寄存器。 图1.0.1 GPIODATA寄存器 GPIODIR 寄存器是数据方向寄存器。在 GPIODIR 寄存器中设置一位将对应的引脚配置为输出;清除一位对应的引脚配置为输入。复位时多有位都清零,也就是说所有的 GPIO 引脚默认是输入。如图1.0.2所示为GPIODIR寄存器。 图1.0.2 GPIODIR寄存器 打开配套的代码例程,打开GPIO文件夹下的IAR工程,如图1.0.3所示为主函数。 图1.0.3 GPIO的主函数 1.1Ti Pin Mux Tool工具 PinMuxconfig()函数可由TI Pin Mux Tool工具生成,打开TI Pin Mux Tool工具,如图1.0.4所示,第一步,在Device内找到CC3200,第二步点击“Start”。 图1.0.4 TI Pin Mux Tool 如图1.0.5所示,第一步点击“GPIO”处的添加,默认是选取全部GPIO;第二步,把“GPIO Signals”前面的勾去掉,去除全选;第三步,选择GPIO_9、GPIO_10、GPIO_11(对应开发板上的三颗LED);驱动LED需要GPIO输出,第四步,把三个GPIO的“Output”勾选上。 图1.0.5 TI Pin Mux Tool配置步骤 最终完成的如图1.0.6所示。在最右边的Generated Files处点击,把“pin_mux_config.c”和“pin_mux_config.h”下载下来添加到工程里即可。 图1.0.6 配置完成示意图 生成好的端口配置函数如图1.0.7所示,该函数主要是对LED对应的端口开启时钟、设置方向等。 图1.0.7 端口配置函数 配置好后,通过GPIO_IF_LedConfigure()函数把LED端口进行处理,即把各个LED的端口所对应的端口组,以及属于该组中的第几个IO提取出来。如图1.0.8所示。 图1.0.8 端口处理 完成上面两步后,先关闭所有的LED,然后在一个死循环内执行“流水”部分,即按顺序以一定的时间间隔开闭LED,如图1.0.9为“流水”效果实现代码。 图1.0.9“流水效果”实现代码 1.2代码下载 编译程序,生成了相对应的bin文件,下载前,先插上仿真调试器Ti Stellaris,在把旁边的拨码开关的“RX”和“TX”拨到“ON”,把启动方式拨码选择为FLASH启动,即把SOP2拨到“ON”。 打开下载工具Uniflash,点击快速启动向导中的“新目标配置”,在弹出的配置对话框中选择CC3x Serial(UART) Interface,然后点击OK。如图1.1.0所示。 图1.1.0选择下载的芯片以及方式 然后在COM Port中输入板子连接的串口号(根据自己的电脑来进行选择), 如图1.1.1所示。 图1.1.1 串口号选择 初次使用板子时,先烧写Sevcie Pack,否则程序可能无法运行,如图1.1.2所示点击“Sevice Pack Programming”,选择之前安装的Sevicepack安装文件夹目录下的bin文件即可,如果之前已经向CC3200烧写过Sevice Pack的这一步可以忽略。 图1.1.2 SevicePcak的烧写 在左侧点击/sys/mcuimg.bin,然后在右侧 URL 中选择刚编译生成的bin文件,然后选中下方的Erase和Update。如图1.1.3所示。 图1.1.3 选择下载的目标 然后点击“CC31xx/CC32xx Flash Setup and Control”,点击 Program 进行下载,如图1.1.4所示。 图1.1.4下载bin文件 根据软件下方的提示,按下复位按键就可以看到下载的相关信息,如图1.1.5所示。 图1.1.5 bin文件下载中 下载完成如图1.1.6所示。 图1.1.6 下载完成 1.3实验现象 把下载前的改变的拨码开关拨回原处。再把拨码开关“D5”、“D6”和“D7”拨到“ON”,使IO口与LED建立连接关系,按下复位开关,可以看到三颗LED呈“流水”状闪烁,如图1.1.7所示为该实验现象。 图1.1.7 实验现象 视频地址:https://www.fengke.club 文件下载请点击:

    2022-04-26 17:17

  • 【开发教程6】AI语音人脸识别(会议记录仪-人脸打卡机)-串口

    本帖最后由 疯壳科技 于 2022-4-29 11:46 编辑 CC3200AI实验教程 ——疯壳·开发板系列 串口 串行接口分为异步串行接口和同步串行接口两种。异步串行接口统称为通用异步收发器(UART)接口,同步串行接口有SPI和I2C等,同步串行接口除了包含数据线外,还包含时钟线。 本次实验中我们使用的是UART,也就是异步串行通信接口。UART的相关标准规定了接口的机械特性、电气特性和功能特性等,UART的电气特性标准包括 RS-232C、RS-422、RS-423和RS-485等,其中RS-232C是最常用的串行通信标准。RS-232C是数据终端设备(DTE)和数据通信设备(DCE)之间串行二进制数据交换接口技术标准,其中DTE包括微机、微控制器和打印机等,DCE包括调制解调器MODEM、GSM模块和Wi-Fi模块灯。 RS-232C机械特性规定使用25针D型连接器,后来简化为9针D型连接器。RS-232C的电气特性采用负逻辑:逻辑“1”的电平低于-3V,逻辑“0”的电平高于+3V,这个TTL的正逻辑(逻辑“1”表示高电平,逻辑“0”表示低电平)不同,因此通过RS-232C和TTL器件通信时必须进行电平转换。 目前微控制器的UART接口采用的是TTL正逻辑,和TTL器件连接不需要电平转换。和采用负逻辑的计算机相连接时需要进行电平转换(我们一般使用USB转串模块)。 CC3200包含两个可编程UART接口(UARTA0~1),主要特性如下: a、可编程的波特率发生器,允许速度高达3Mbps; b、独立的16*8发送和接口FIFO,减轻CPU中断处理负载; c、可编程FIFO长度,包括提供传统双缓冲接口的单字节操作; d、FIFO触发阈值包括1/8、1/4、1/2、3/4和7/8; e、标准的异步通信起始、停止和奇偶校验位。 CC3200的UART接口具有以下可编程串行接口特性: a、可编程的5、6、7或8位数据; b、偶、奇或无校验生成/检测; c、1或2个停止位生成; d、支持RTS和CTS调制解调器握手; e、标准的FIFO阈值中断和传输结束中断。 CC3200的UART支持DMA,使用DMA可实现高效传输,UART具有单独的DMA发送和接收通道。支持当FIFO中有数据的单个请求接收和可编程FIFO阈值的突发请求接收以及FIFO中有空间的单个请求发送和可编程FIFO阈值的突发请求发送。 1.1寄存器 UARTDR为数据寄存器(也是FIFOs的接口)。 在发送数据时,如果FIFO使能了,则写入该寄存器的数据会发送到发送FIFO 中。如果FIFO关闭,数据会被存储在发送保持寄存器中(发送FIFO最低一个字)。写该寄存器意味着通过串口发送。 在接收数据时,如果FIFO使能了,数据字节和4位状态位被发送到12位宽的接收FIFO中。如果FIFO关闭,数据字节和状态被存储在接收保持寄存器中(接收FIFO中的最低一个字)。可以通过读取该寄存器来获取接收数据。如图1.0.1所示为UARTDR寄存器,如图1.0.2为其位定义。 图1.0.1 UARTDR寄存器 图1.0.2 UARTDR寄存器位定义 UARTRSR_UARTECR是接收状态寄存器/错误清除寄存器。除了UARTDR寄存器之外,接收的状态位也可以通过UARTRSR寄存器获取。如果从该寄存器读取状态信息,则状态信息对应与在读取UARTRSR寄存器之前的UARTDR的状态信息。当有溢出条件发生时,状态位中的溢出标志位会立刻被置位。UARTRSR寄存器不能被写。写任何值到寄存器UARTECR中将会清除帧、校验、打断和溢出错误。复位会清零所有的位。如图1.0.3所示为UARTRSR_UARTECR寄存器,如图1.0.4为其位定义。 图1.0.3 UARTRSR_UARTECR寄存器 图1.0.4 UARTRSR_UARTECR寄存器位定义 UARTFR为标志寄存器。在复位之后,TXFF、RXFF和BUSY标志位为0,TXFE 和RXFE位为1。RI和CTS位指示调制解调器的控制流和状态。这里需要注意的是,调制解调位只在UART1中有效,在UART0中是保留位。如图1.0.5所示为UARTFR,图1.0.6为其位定义。 图1.0.5 UARTFR寄存器 图1.0.6 UARTFR寄存器位定义 UARTIBRD寄存器是波特率除数的整数部分。复位之后所有的位被清零。最小值为1(当UARTIBRD为0时),此时UARTFBRD寄存器无效。当改变UARTIBRD 寄存器时,只有在当前的字节传输完成之后才生效。波特率除数的任何改变都必须在写UARTLCRH寄存器之后。如图1.0.7所示为UARTIBRD寄存器。 图1.0.7 UARTIBRD寄存器 UARTFBRD寄存器是波特率除数的小数部分。复位之后所有的位被清零。当修改UARTFBRD寄存器的值时,只有在当前字节发送或者接收完成之后才会有效。波特率除数的任何改变都必须在写UARTLCRH寄存器之后。如图1.0.8所示为UARTFBRD寄存器。 图1.0.8 UARTFBRD寄存器 UARTLCRH寄存器是线控制寄存器。该寄存器控制串口的数据长度、校验和停止位的选择。当更新波特率除数寄存器的时候,必须也要重写该寄存器。因为波特率除数寄存器的写选通信号和该寄存器是连接在一起的。如图1.0.9所示为UARTLCRH寄存器,图1.1.0为其位定义。 图1.0.9 UARTLCRH寄存器 图1.1.0 UARTLCRH寄存器位定义 UARTCTL是控制寄存器。在复位之后,除了发送和接收使能位之外,其它位都被清零。UARTEN位用于使能UART模块。在配置串口模块时必须将该位清零。如果在串口进行发送或者接收的操作时关闭串口模块功能,则在完成当前发送或者接收操作之后才关闭。如图1.1.1所示为UARTCTL寄存器,如图1.1.2为其位定义。 注意:在UART使能的状态下,UARTCTL寄存器不能被改变,否则结果是无法预测的。修改UARTCTL寄存器时建议按照下面的操作进行: 1、关闭UART; 2、等待当前字节的发送或者接收操作完成; 3、通过清零UARTLCRH寄存器中的FEN位来清除发送FIFO; 4、重新写控制寄存器; 5、使能UART模块。 图1.1.1 UARTCTL寄存器 图1.1.2 UARTCTL寄存器位定义 UARTIFLS是选择FIFO产生中断阈值的寄存器。可以使用该寄存器来定义FIFO的阈值,同时UARTRIS寄存器中的TXRIS和RXRIS位被触发。产生中断是基于一个发送操作超过阈值而不是等于阈值。也就是说FIFO中的数据超过规定的阈值之后才会产生中断。例如,如果接收的触发阈值设置为一般(8字节),那么在串口模块接收到第9个字节的时候才会产生中断。在复位之后,TXIFLSEL和RXIFLSEL位被配置,所以FIFOs在接收一半时触发中断。如图1.1.3所示为UARTRIS寄存器及其位定义。 图1.1.3 UARTIFLS及其位定义 UARTIM是中断掩码置位/清零寄存器。读取该寄存器则获得当前中断的掩码值。进行置位时,对应的中断将被发送到中断控制器。清零操作则对应的中断不会被发送到中断控制器。如图1.1.4所示为UARTIM寄存器,如图1.1.5为其位定义。 图1.1.4 UARTIM寄存器 图1.1.5 UARTIM寄存器位定义 UARTRIS是源中断状态寄存器。可以读取到当前中断源。写操作无效,如图1.1.6所示为UARTRIS寄存器,如图1.1.7为其位定义。 图1.1.6 UARTRIS寄存器 图1.1.7 UARTRIS寄存器位定义 UARTMIS是中断掩码状态寄存器。读该寄存器获取对应中断的掩码值。写操作无效。如图1.1.8所示为UARTMIS寄存器,如图1.1.9为其位定义。 图1.1.8 UARTMIS寄存器 图1.1.9 UARTMIS寄存器位定义 UARTICR是中断清零寄存器。置位则对应的中断被清除(清除中断源寄存器和中断掩码寄存器中对应的位),清零操作无效。如图1.2.0所示是为UARTICR寄存器,如图1.2.1为其位定义。 图1.2.0 UARTICR寄存器 图1.2.1 UARTICR寄存器位定义 UARTDMACTL是DMA控制寄存器。如图1.2.2所示为UARTDMACTL寄存器及其位定义。 图1.2.2 UARTDMACTL寄存器及其位定义 1.2实验现象 打开CC3200_Uart_Demo文件夹里的工程,该工程主要是把CC3200的UARTA0的波特率为115200bps,8位数据位,1个停止位,无奇偶校验位,如图1.2.3所示。 图1.2.3 串口参数设置 当串口接收到数据后,把接收到的数据再通过串口发送出去,编译工程,打开Uniflash,把bin文件下载到CC3200板子上(具体步骤请参考GPIO小节)。 把“CH340G_VCC”和串口选择的第一个“RXD”和第二个“TXD”拨码开关均拨到“ON”。 插上USB数据线接到电脑,打开串口助手,选择串口号,波特率设置为115200bps,按下板子的复位可见串口打印,如图1.2.4所示。 图1.2.4 复位时串口打印 在发送框内输入疯壳的网址,点击发送,串口助手收到CC3200的回传,如图1.2.5所示。 图1.2.5 串口助手收到回传视频地址:http://www.fengke.club文件下载请点击:

    2022-04-29 11:42

  • 【开发教程7】AI语音人脸识别(会议记录仪-人脸打卡机)-中断

    CC3200AI实验教程 ——疯壳·开发板系列 中断 接口数据传送控制方式有查询、中断和DMA等,中断是重要的接口数据传送控制方式。中断控制分为全局和局部两级,全局中断由NVIC控制,局部中断由外设控制。 嵌套向量中断控制器NVIC支持多个内部异常和多达240个外部中断。从广义上讲,异常和中断都是暂停正在执行的程序转去执行异常或中断处理程序,然后返回原来的程序继续执行。从狭义上将,异常由内部事件引起,而中断有外部硬件产生。 异常和中断的处理与子程序调用有相似之处,但也有下列本质区别: 什么时候调用子程序是确定的,而什么时候产生异常和中断时不确定的。子程序的起始地址由调用程序给出,而异常和中断程序的起始地址存放在地址表中。 子程序的执行一般是无条件的,而异常和中断处理程序的执行要先使能。 CC3200的NVIC具有下列特性: a、确定的、快速的中断处理,总是12个时钟周期; b、每个中断的优先级可编程(0~7,0表示最高优先级); c、3~8位优先级配置; d、动态重新分配中断优先级; e、中断优先级分组允许选择中断优先级分组和中断子优先级的数量。低延迟中断和异常处理; f、中断信号电平和边沿检测。 1.1寄存器 本小节将使用的GPIO外部中断来实现按键的功能。每个GPIO端口的中断功能通过7个寄存器来进行控制。这些寄存器用来选择中断源、中断优先级和边沿特性。当一个或者多个GPIO输入引起中断时,一个单中断信号输出到整个GPIO端口的中断控制器。 下面三个寄存器定义了引起中断的边沿或检测: a、GPIOIS:GPIO 中断检测寄存器; b、GPIOIBE:GPIO中断边沿寄存器; c、GPIOIEV:GPIO中断时间寄存器。 中断功能通过GPIO中断掩码(GPIOIM)寄存器来进行使能和关闭。 当一个中断条件产生时,有两个地方可以查看中断信号的状态:GPIO源中断状态(GPIORIS)寄存器和GPIO掩码中断状态(GPIOMIS)寄存器。正如名称暗示的那样,GPIOMIS寄存器只显示可以发送给中断控制器的中断条件。GPIORIS 寄存器表示一个 GPIO引脚达到了产生中断的条件,但是不一定会发送给中断控制器。 如果是GPIO电平检测中断,产生中断的电平信号必须保持到中断服务的产生。一旦输入的信号解除中断产生的逻辑信号,对应的GPIORIS寄存器中的源中断寄存器位将被清零。对于GPIO边沿检测中断,GPIORIS寄存器中的RIS位通过向寄存器GPIOICR中的对应位写入1来进行清零。GPIOMIS寄存器中的对应位反应源中断状态位的掩码值。 当编辑中断控制寄存器时,应当将中断全部关闭(GPIOIM清零)。如果对应的位使能的话,则写任何中断控制寄存器都会产生不必要的中断 GPIOIS是中断检测寄存器。置位则对应的引脚进行电平检测,清零则对应的引脚进行边沿检测。在复位时,所有的位清零。如图1.0.1所示。 注意:为了防止产生错误的中断,在配置中断检测寄存器和边沿寄存器的时候,应当清零GPIOIM寄存器中的IME位来屏蔽中断引脚。配置GPIOIS寄存器的IS位和GPIOIBE寄存器的IBE位。清除GPIORIS寄存器。最后通过置位GPIOIM寄存器中的IME位来打开引脚。 图1.0.1 GPIOIS寄存器 GPIOIBE寄存器允许双边沿来触发中断。当GPIOIS寄存器设置为检测边沿时, 则设置GPIOIBE寄存器来配置对应的引脚来检测上升和下降沿,而忽略 GPIOIEV 寄存器中的对应位的配置。清零一位则配置为引脚受GPIOIEV寄存器的控制。复位之后,所有的位都被清零。如图1.0.2所示。 注意:为了防止产生错误的中断,在配置中断检测寄存器和边沿寄存器的时候,应当清零GPIOIM寄存器中的IME位来屏蔽中断引脚。配置GPIOIS寄存器的IS位和GPIOIBE寄存器的IBE位。清除GPIORIS寄存器。最后通过置位GPIOIM寄存器中的IME位来打开引脚。 图1.0.2 GPIOIBE寄存器 GPIOIEV寄存器是中断事件寄存器。置位该寄存器中对应的位来配置对应的引脚检测上升沿或者高电平,这取决于GPIOIS 寄存器对应位的配置。清零该寄存器中的对应位则对应的引脚检测下降沿或者低电平,这取决于GPIOIS寄存器中对应位的配置。复位之后所有的位都清零。如图1.0.3所示。 图1.0.3 GPIOIEV寄存器 GPIOIM寄存器是中断掩码寄存器。置位该寄存器中的对应位,则对应引脚上产生的中断将通过组合中断信号发送给中断控制器。清零则对应的引脚产生的中断不会发送给中断控制器。复位之后所有的位都清零。如图1.0.4所示。 图1.0.4 GPIOIM寄存器 GPIORIS寄存器是源中断状态寄存器。当对应的引脚达到中断条件时,该寄存器中对应的位被置位。如果中断掩码(GPIOIM)寄存器中的对应位被置位,则发送中断信号到中断控制寄存器。某一位读取为0,则说明对应的引脚没有产生中断。对于电平触发中断,引脚上的中断信号必须保持到中断服务。一旦中断信号达不到中断逻辑检测要求,则GPIOIS寄存器对应的RIS位将被清零。对于一个GPIO边沿检测中断,GPIORIS寄存器中的RIS位通过置位GPIOICR寄存器中对应的位进行清零。GOUIMIS寄存器中的位反映RIS位的掩码值。如图1.0.5所示。 图1.0.5 GPIORIS寄存器 GPIOMIS寄存器是掩码中断状态寄存器。如果寄存器中对应位被置位,则对应的中断将被发送到中断控制器。如果某一位被清零,则无论是否有中断产生, 中断都会被屏蔽掉。GPIOMIS寄存器是中断掩码之后的状态。如图1.0.6所示。 图1.0.6 GPIOMIS寄存器 GPIOICR寄存器是中断清零寄存器。对于边沿检测中断,置位GPIOICR寄存器中对应的位,则会清除GPIORIS和GPIOMIS寄存器中对应的位。如果中断是电平检测,则该寄存器中的对应位没有影响。另外,向该寄存器中写入0也没有任何影响。如图1.0.7所示。 图1.0.7 GPIOICR寄存器 1.2实验现象 本实验在是官方CC3200SDK_1.2.0中Interrupt例程代码的基础上修改得来的,打开Interrupt_Demo,由于本次实验用到串口和按键,所以在mian函数的PinMuxConfig()中配置了串口0的输入输出以及GPIO_13和GPIO_22的方向为输入。 本次实验的关键是在ButtonIntInit()函数中,该函数如图1.0.8所示。 图1.0.8 ButtonIntInit()函数 在该函数中吧GPIO_13与GOIO_22配置为下降沿触发,触发的中断函数为Button1IntHandler()以及Button2IntHandler(),进入中断后,首先清除标志位,然后通过串口0打印出“Button1”以及“Button2”。 打开Uniflash,把编译后生成bin文件下载到板子上(参考GPIO小节),把串口选择的拨码的第一个“RXD”以及“CH340G_VCC”拨到ON,这里我们用到了串口0的接收,打开串口调试助手,选择对应的串口号,波特率设置为115200,打开串口,a按下复位,可以看到串口打印信息如图1.0.9所示。 图1.0.9 复位时串口打印 按下板子上的SW2和SW3可以看到串口打印信息如图1.1.0所示。 图1.1.0 按下按键后串口打印 配套资料:http://www.fengke.club 详情地址:http://shop115904315.taobao.com/ 文件下载请点击:

    2022-05-05 16:46

  • 【开发教程3】AI语音人脸识别(会议记录仪-人脸打卡机)-CC3200简介

    (STA)、接入点(AP)和Wi-Fi 直连(P2P)模式 , WPA2可保障个人和企业安全性;f、用于自主和快速Wi-Fi连接的SimpleLink连接管理器;g、 用于简单灵活Wi-Fi配置的智能

    2022-04-25 17:17

  • 【开发教程1】疯壳·AI语音人脸识别(会议记录仪-人脸打卡机)-开发环境搭建

    环境有多种,常见的有两种,一种是使用 TI 官方的开发环境 Code Composer Studio 另一种是使用 IAR。由于 AI 人工智能套件的实验工程源码是在 IAR 环境下开发的,故这里只讲

    2022-07-27 10:14

  • 【开发教程12】疯壳·AI语音人脸识别(会议记录仪-人脸打卡机)-语音采集

    CC3200AI实验教程——疯壳·开发板系列语音采集 音频采集板卡主要运用的是TI官方的方案TLV320AIC3254音频编解码器+TPA2012D2RTJ功率放大器,如图1.0.1为语音采集主板的实物图。 图1.0.1 语音采集主板的实物图 图1 TLV320AIC3254(有时也称为AIC3254)是一款灵活的低功耗,低电压立体声音频编解码器,具有可编程输入和输出,PowerTune功能,完全可编程的miniDSP,固定的预定义和可参数化信号处理模块,集成PLL,集成 LDO和灵活的数字接口,支持I2C和SPI。TLV320AIC3254的内部结构,如图1.0.2所示。 图1.0.2 TLV320AIC3254内部结构图 图2 如图1.0.3为语音采集主板TLV320AIC3254外围电路。 图1.0.3 TLV320AIC3254外围电路 图3 TPA2012D2是一款立体声的D类音频放大器(D类放大器),TPA2012D2为每个通道提供独立的关闭控制。使用G0和G1增益选择引脚可以将增益选择为6,12,18或24 dB,在语音采集板卡上主要是实现把采集回来的声音在通过耳机口播放出来的效果,其功能框图,如图1.0.4所示。 图1.0.4 TPA2012D2功能框图 图4 如图1.0.5为语音采集主板的TPA2012D2外围电路。 图1.0.5 TPA2012D2外围电路 图5 如需定制开发,请通过官网“疯壳”网页底部的“联系我们”进行联系 完整配套资料:http://www.fengke.club 对应开源套件地址:http://shop115904315.taobao.com/ 文件下载请点击:

    2022-08-01 16:09

  • 【开发教程16】AI语音人脸识别(会议记录仪-人脸打卡机)-AI人脸图像采集

    CC3200AI实验教程——疯壳·开发板系列AI人脸图像采集 人脸图像采集硬件部分主要由CC3200和MT9D111摄像头组成。摄像头主要是作为人脸采集部分,CC3200则作为主控制核心。如图1.0.1所示为MT9D111摄像头模组的实物图。 图1.0.1 MT9D111摄像头模组 图1 MT9D111摄像头模组及其外围的原理图,如图1.0.2所示。 图1.0.2 MT9D111及其外围原理图 图2 其中SDA为I2C数据、SCK为I2C时钟、PWDN摄像头工作状态选择、PCLK像素点的时钟、MLKIN 是主时钟、RESET 复位引脚、VD为 列同步信号、HD为行同步信号、D0-D7 摄像头的并行数据口。 使用IAR打开AI_OCR里面的工程,在该工程的main()函数中可见如图1.0.3所示的程序段,该程序段为MT9D111摄像头初始化部分,初始化函数为camera_init(),初始化成功返回0(SUCCESS),并且通过串口1打印“camera_init SUCCESS!!!”并把标志位g_camera_init_ok函数置为1,用于作为摄像头初始化成功的一个标志位。 图1.0.3 摄像头初始化部分 图3 摄像头底层驱动部分主要包含在mt9d111.c和camera_app.c中。获取摄像头PEG图像数据的函数如图1.0.4所示。 图1.0.4 获取摄像头JPEG图像数据函数 图4 其中camera_get_jpg_head()函数为摄像头采集到的JPEG图像的头部信息,长度为head_length,存储在指针pHeadBuffer指向的空间中。 而camera_get_one_frame()函数为摄像头采集到的JPEG图像的信息,长度为frame_length,存储在指针pFrameBuffer指向的空间中。 打开文件夹getaframe下的工程,编译下载到CC3200,打开串口调试助手,波特率为115200选择对应的串口号,点击打开,向CC3200发送“fk+getaframe#”指令,串口即可接收到返回的JPEG数据。 图1.0.4 串口接收到的图片数据 图5 把这些数据复制下来保存到一个新建的frame.txt文件下,打开我们提供的java程序“Hex2Image.java”该java程序的功能是把16进制的JPEG图片数据转换成一张JPEG格式的图片。 如图1.0.5所示为该JAVA程序的部分代码。 图1.0.5 “Hex2Image”Java程序代码 图6 需要修改的部分为箭头处,即txt文件的路径,以及生成图片的路径。接下来便是编译该java文件(需要预先装好java环境以及设置好java的环境变量)。 “WIN+R”,输入“cmd”进入windows的DOS系统界面,如图1.0.6所示。 图1.0.6 DOS界面 图7 首先在dos中定位到“Hex2Image.java”的路径输入“javac Hex2Image.java”对其进行编译。如图1.0.7所示。 图1.0.7 编译java源文件 图8 此刻在目录下会出现一个“Hex2Image.class”文件是编译过后生成的可执行文件,接下来运行该可执行文件在dos中输入“java Hex2Image”执行该文件,如图1.0.8所示为dos下执行“Hex2Image.class”。 图1.0.8 dos下执行“Hex2Image.class” 图9 此后在java程序中预先写好的路径下会出现一张JPEG格式的图片。打开该图片如图1.0.9所示。 图1.0.9 获取到的图片 图10 配套资料:http://www.fengke.club 套件地址:http://shop115904315.taobao.com/ 文件下载请点击:

    2022-06-13 18:21

  • 【开发教程17】AI语音人脸识别(会议记录仪-人脸打卡机)-AI人脸注册认证与识别

    CC3200AI实验教程——疯壳·开发板系列AI人脸注册认证与识别 使用IAR打开AI_OCR文件夹里面的工程,打开common.h头文件,连接的路由器名称及密码如图1.0.1所示,如需修改成需要注意路由器名称长度和密码的长度以及加密类型都要修改。 图1.0.1 路由器相关信息 图1 在AI人脸识别系统中需要有上层服务器,CC3200通过TCP与上层的服务器建立连接关系,通过这一链路来实现数据包的传递,从而实现人脸识别的功能。在mian.c文件中通过两个全局变量来定义服务器的IP及端口,如图1.0.2所示为连接服务器的IP及端口,用户可在此更改切换连接到自己的服务器。 图1.0.2 服务器的IP及端口 图2 IP地址用16进制来表示,例如:“192”对应16进制的“0xc0”、“168”对应16进制的“0xa8”、“05”对应16进制的“0x05”、“05”对应16进制的“0x05”,合起来就是0xc0a80505(192.168.5.5)。在UartTask任务中为了方便调试与二次开发,AI人脸识别系统使用串口指令的方式来开启相关标志位从而实现对应的功能,如表1.0.1所示为AI人脸识别系统的串口指令表。 表1.0.1 AI人脸识别系统串口指令表 表1 为了方便调试,最好提前把这些指令添加到串口调试助手中,使用时直接点击发送即可。如图1.0.3所示为把指令添加到SSCOM串口调试助手后的界面图。 图1.0.3 添加指令后的SSCOM串口调试助手 图3 UartTask任务主要是实现接收串口指令,对接收到的指令匹配并置位相关标志位。 WlanModeChangeTask任务主要是为了实现CC3200网络连接部分,如图1.0.4所示为该任务代码。 图1.0.4 WlanModeChangeTask任务 图4 当接收到串口发来的模式改变指令“fk+set+mode+1#”时会使得模式改变开关stationModeChangeFlag置1,通过ChangeToStationMode()函数,CC3200被配置为STA模式。 当接收到串口发来的联网指令“fk+connectWlan#”时会使得连接网络开关connectToWlanFlag置1,通过ConnectToWlan()函数,CC3200连入指定的路由器。 当接收到串口发来的连接服务器指令“fk+connectServ#”时会使得连接服务器开关connectToServerFlag置1,通过ConnectToServer(),CC3200与指定IP的端口建立连接。 SendDataTask任务主要是实现检测到相关指令的标志位被置位后发送相关的数据包到服务器端,SendDataTask任务的核心部分,如图1.0.5所示。 图1.0.5 SendDataTask任务 图5 具体的数据包内容可参考《加解密与数据协议》小节。ReceiveDataTask任务主要是对接收到的服务器回传数据进行处理,如图1.0.6所示为该任务的代码。每当服务器接收到CC3200发来的数据包时,会返回一个响应数据包,CC3200通过发送数据包时置位的标志位,来判断接收到的为哪一个包的响应数据包,并对响应数据进行处理。具体可参考《加解密与数据协议》小节。 图1.0.7 ReceiveDataTask任务 图6 编译代码下载Bin文件到CC3200上(具体可参考GPIO小节),下载成功之后将拨码开关再拨回去,由于用到串口UART1调试的接收,需要把USB转TTL电平的CH340的供电端以及收发端接上,把CH340G_VCC拨到ON,接收端RXD拨到ON如图1.0.8所示。 图1.0.8 下载完成的后的拨码开关示意图 图7 由于板子拨码处的TXD(GPIO_11)也已被摄像头使用,所以在程序中改为了GPIO_31,故需要把P17短路帽接上,插上USB线。最后板子上的拨码及接线状态如图1.0.9所示。 图1.0.9 最终接线状态 图8 打开串口调试助手,选择相应的串口号(根据自己电脑进行选择),波特率设置为115200,打开,按下板子复位键。会收到摄像头初始化的信息,如图1.1.0所示。 图1.1.0 摄像头初始化信息 图9 点击sta,将CC3200配置为Station模式,收到串口回传,如图1.1.1所示。 图1.1.1 配置CC3200为Station模式 图10 点击wifi,CC3200接入程序中指定的路由器,收到串口回传,如图1.1.2所示。 图1.1.2 CC3200接入路由器 图11 点击服务器,CC3200与程序中定义好的服务器IP和端口建立TCP连接,收到串口回传,如图1.1.3所示。 图1.1.3 CC3200与服务器建立TCP连接 图12 若设备已经注册过,Skey已经写在了程序里,可以直接登录;若未注册则发送注册包,点击“登录”。收到串口回传,如图1.1.4所示。 图1.1.4 AI设备注册 图13 登录成功后,设备将会在空闲的时候不断地向服务器发送心跳包,当Skey过期的时候也会自己更新Skey。 点击人脸注册,收到串口回传,会得到一个属于这个人脸的UID,如图1.1.5所示。 图1.1.5 人脸注册包 图14 接下来是按顺序发送正脸到结束人脸注册,按顺序点击正脸且用摄像头对着你的脸,如果没有识别到有脸,(下面的包也是一样)会发送失败,待返回图片发送成功回应时,再采集下一张脸,依次点击,完成7张脸部采集后点击结束人脸注册,完成人脸录入注册。如图1.1.6所示,发送一组人脸进行人脸注册。 图1.1.6 发送一组人脸进行注册 图15 点击人脸识别,会在已录入的人脸库中,寻找与当前正在识别的脸最匹配的user_top_num张脸,user_top_num已经在程序里写为了1,即在库中寻找一张脸与正在识别的脸相似度最高的脸,串口会返回相似度以及找到的脸的UID,相似脸的人脸类型即正脸到眨眼(0x00~0x06)和userinfo(人脸信息),如图1.1.7所示。 图1.1.7 人脸识别信息 图16 点击人脸认证,则会比较人脸与特定的UID人脸进行比对,返回相似度。这里的UID已经记录为之前注册的人脸。串口返回如图1.1.8所示。 图1.1.8 人脸认证信息 图17 配套资料:http://www.fengke.club 套件地址:http://shop115904315.taobao.com/ 文件下载请点击:

    2022-06-15 19:17

  • 【开发教程2】疯壳·AI语音人脸识别(会议记录仪-人脸打卡机)-系统测试

    CC3200AI实验教程——疯壳·开发板系列系统测试拿到CC3200AI开发套件之后需要对设备进行注册,否则会无法使用AI功能,下面教大家对拿到的CC3200AI开发套件进行注册。发货时会会给予每一个套件唯一的32位注册ID码以及唯一32位的设备PN码。首先使用手机打开疯壳官网www.fengke.club并且登录(如未注册请先注册),在最下面一栏中切换到“个人”,如图1.0.1所示。图1.0.1个人界面在个人界面下,选择我的设备——》添加设备,如图1.0.2所示。图1.0.2 “我的设备”界面此刻会出现一个填写框要求填写32位的注册ID码,把提供的32位ID码输入进去,如图1.0.3所示。图1.0.3 输入32位ID码点击“下一步”会出现要求输入32位PN码,把PN码输入进去,并点击下一步,会出现绑定成功的界面,如图1.0.4所示图1.0.4 设备绑定成功界面此时设备并未注册成功,点击“查看设备”,会进入一个注册步骤,里面提供了注册设备必须的注册包Globle_Register_Pack以及Globle_Auth_key。如图1.0.5所示。图1.0.5 注册步骤按照上面的步骤,首先复制AI_OCR的文件夹到SDK安装目录的example下(所有代码均为如此),打开提供的代码AI_OCR文件夹里的工程,在main.c里找到Globle_Register_Pack以及Globle_Auth_key所在处。如图1.0.6所示。图1.0.6Globle_Register_Pack以及Globle_Auth_key所在处按照图1.0.5上的流程把Globle_Register_Pack以及Globle_Auth_key复制到代码中去替换掉。打开common.h把需要接入的路由器设备改成现有且可以连网的,即修改路由器的名称,加密方式以及密码。如图1.0.6所示。图1.0.7 路由器相关修改最后一步是需要修改串口打印输出的端口可以直接复制我们提供的uart_if.h复制SDK安装目录下的example——》common文件夹下替换(把串口打印口切换为UART1,后续摄像头会占用UART0,该操作不会对别的工程有影响)。编译程序,生成了相对应的bin文件,下载前,先插上仿真调试器Ti Stellaris,在把旁边的拨码开关的“RX”和“TX”拨到“ON”,把启动方式拨码选择为FLASH启动,即把SOP2拨到“ON”。打开下载工具Uniflash,点击快速启动向导中的“新目标配置”,在弹出的配置对话框中选择CC3x Serial(UART) Interface,然后点击OK。如图1.0.7所示。图1.0.8选择下载的芯片以及方式然后在COM Port中输入板子连接的串口号(根据自己的电脑来进行选择),如图1.0.8所示。图1.0.9 串口号选择初次使用板子时,先烧写Sevcie Pack,否则程序可能无法运行,如图1.0.9所示点击“Sevice Pack Programming”,选择之前安装的Sevicepack安装文件夹目录下的bin文件即可,如果之前已经向CC3200烧写过Sevice Pack的这一步可以忽略。图1.0.10 SevicePcak的烧写在左侧点击/sys/mcuimg.bin,然后在右侧 URL 中选择刚编译生成的bin文件,然后选中下方的Erase和Update。如图1.1.0所示。图1.1.1选择下载的目标然后点击“CC31xx/CC32xx Flash Setup and Control”,点击 Program 进行下载,如图1.1.1所示。图1.1.2 下载bin文件根据软件下方的提示,按下复位按键就可以看到下载的相关信息,如图1.1.2所示。图1.1.3 bin文件下载中下载完成如图1.1.3所示。图1.1.4 下载完成下载完成后将拨码开关拨回原处,插上USB和摄像头,把UART拨码的第三个拨码(UART1的RXD)拨到“ON”,并把板子上的P17用短路帽插上(UART1的TXD),打开串口调试助手,选择自己的串口号,波特率设置为115200,点击打开,并按下复位,会打印摄像头初始化的信息,串口打印如图1.1.4所示。图1.1.5 串口初始化信息为了方便开发与演示,均通过串口指令来实现相关功能,指令表如表1.0.1所示。表1.0.1 串口指令表这里主要用的指令1~5,首先发送指令1,即配置CC3200为STA模式。串口返回如图1.1.5所示。图1.1.7配置CC3200为STA模式再发送指令2,让CC3200接入在common.h中定义的路由器。如图1.1.6所示为C3200接入路由器的串口回传。图1.1.8CC3200接入路由器接下来发送指令3,接入到远程服务器端,如图1.1.7所示为CC3200接入到远程服务器端的串口回传。图1.1.9CC3200接入到远端服务器串口回传下一步是重点,即发送之前复制过来的注册包,发送指令4,收到串口回传的信息,如图1.1.8所示。如图1.2.0 注册回传 套件首次注册时就会收到如图1.1.8所示的串口回传,并且得到新的DIN码和Skey码,如果不是第一次注册则会直接断开与服务器的连接。此时回到手机上,返回重新进入“我的设备”在设备里会看到Skey和DIN如图1.1.9所示。图1.2.1注册成功后“我的设备”界面到这一步话,恭喜您,已经注册设备成功了,后续使用AI部分就不需要发送注册包了,连接网络并接入服务器后直接发送串口指令5,即登录包即可。但是此刻的登录包的还不是最新的,需要把Skey和Din复制到代码中去。同样的步骤,打开AI_OCR文件夹下的工程,打开main.c,把Skey和Din复制到如图1.2.0所示的位置替换掉即可。图1.2.2 Skey及Din的位置编译下载,后续即可以直接登录。更多完整学习资料和对应开源套件,请登陆官网:“疯壳”如需定制开发,请通过官网“疯壳”网页底部的“联系我们”进行联系文件下载请点击:

    2022-07-27 11:51