cubemax spi通信的ld3320语音识别模块 stm32f103c8t6为例

sys

rcc与时钟(拉满即可)

中断

spi

串口

生成代码。

GPIO(RST,CS,WR,这个自行设置就好,本案例会分别设置为B5,B10,A1)

设置3个output即可,设置相同,如上图。

ld3320.c(这里ld3320写成ld2230了,自己修改下)

#include "ld2230.h"
#include <stdio.h>
#include "spi.h"
#include "usart.h"
#include "delay.h"
/************************************************************************************
//	nAsrStatus 用来在main主程序中表示程序运行的状态,不是LD3320芯片内部的状态寄存器
//	LD_ASR_NONE:			表示没有在作ASR识别
//	LD_ASR_RUNING:		表示LD3320正在作ASR识别中
//	LD_ASR_FOUNDOK:		表示一次识别流程结束后,有一个识别结果
//	LD_ASR_FOUNDZERO:	表示一次识别流程结束后,没有识别结果
//	LD_ASR_ERROR:			表示一次识别流程中LD3320芯片内部出现不正确的状态
********************************************************************************
*/

#define USE_HAL_LIB//使用HAL库
uint8_t nAsrStatus=0;
uint8_t nAsrRes=0;
uint8_t flag=0;
///用户修改
extern uint8_t nAsrStatus;
uint8_t  nLD_Mode=LD_MODE_IDLE;
uint8_t  ucRegVal;

#define LD3320_SPI	hspi1

/*硬件SPI读写*/
uint8_t SPI_RreadWrite_Data(uint8_t *tx_data, uint8_t len)
{
	uint8_t rx_data[len];
	HAL_SPI_TransmitReceive(&LD3320_SPI,tx_data,rx_data,len,0XFFFF);
	return rx_data[len-1];
}
//printf



uint8_t LD3320_Init(void)
{
	//GPIO_InitTypeDef  GPIO_InitStructure;
	__HAL_RCC_GPIOA_CLK_ENABLE();
	__HAL_RCC_GPIOB_CLK_ENABLE();
//	RCC_APB2PeriphClockCmd(LD3320_SDCK_GPIO_CLK|LD3320_SDO_GPIO_CLK|LD3320_SDI_GPIO_CLK|\
	LD3320_SCS_GPIO_CLK|LD3320_RSTB_GPIO_CLK|LD3320_IRQ_GPIO_CLK,ENABLE);	 //使能PA端口时钟  | RCC_APB2Periph_AFIO
	//GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//要先开时钟,再重映射;关闭jtag,保留swd。
//	
//	
// 	GPIO_InitStructure.Pin = GPIO_PIN_5;				//端口配置
// 	GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; 		  //推挽输出
// 	GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
//	HAL_GPIO_Init(GPIOA,&GPIO_InitStructure);
//	
//	GPIO_InitStructure.Pin = GPIO_PIN_7;				//端口配置
// 	GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; 		  //推挽输出
// 	GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
//	HAL_GPIO_Init(GPIOA,&GPIO_InitStructure);
//	
//	GPIO_InitStructure.Pin = GPIO_PIN_4;				//端口配置
// 	GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; 		  //推挽输出
// 	GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
//	HAL_GPIO_Init(GPIOA,&GPIO_InitStructure);
//	
//	GPIO_InitStructure.Pin = GPIO_PIN_15;				//端口配置
// 	GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; 		  //推挽输出
// 	GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
//	HAL_GPIO_Init(GPIOB,&GPIO_InitStructure);
//	
//	GPIO_InitStructure.Pin = GPIO_PIN_6;				//端口配置
// 	GPIO_InitStructure.Mode = GPIO_MODE_INPUT; 		  //推挽输出
// 	GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
//	HAL_GPIO_Init(GPIOA,&GPIO_InitStructure);
//		
//	GPIO_InitStructure.Pin = GPIO_PIN_13;				//端口配置
// 	GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; 		  //推挽输出
// 	GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
//	HAL_GPIO_Init(GPIOB,&GPIO_InitStructure);
//	
//	HAL_GPIO_WritePin(LD3320_WR_GPIO_Port,LD3320_WR_Pin,GPIO_PIN_RESET);//拉低WR引脚

//	/* GPIO Ports Clock Enable */
//	__HAL_RCC_GPIOB_CLK_ENABLE();
//	  /*Configure GPIO pin : PB12 */
//  GPIO_InitStructure.Pin = GPIO_PIN_12;
//  GPIO_InitStructure.Mode = GPIO_MODE_IT_FALLING;
//  HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);
//	
//	  /* EXTI interrupt init*/
//  HAL_NVIC_SetPriority(EXTI15_10_IRQn,2,0);
//  HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
	HAL_Delay(500);
	
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);//拉低RST引脚
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_RESET);//拉低CS引脚
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);//拉低WR引脚
	return LD3320_Check();
}

/************************************************************************
功能描述: 	 复位LD模块
入口参数:	 none
返 回 值: 	 none
其他说明:	 none
**************************************************************************/
void LD_Reset(void)
{
	RST_HIGH;
	HAL_Delay(5);
	RST_LOW;
	HAL_Delay(5);
	RST_HIGH;
	
	HAL_Delay(5);
	CS_LOW;
	HAL_Delay(5);
	CS_HIGH;
	HAL_Delay(5);
}
/************************************************************************
功能描述: LD模块命令初始化
入口参数: none
返 回 值: none
其他说明: 该函数为出厂配置,一般不需要修改;
					 有兴趣的客户可对照开发手册根据需要自行修改。
*********************************************
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值