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
其他说明: 该函数为出厂配置,一般不需要修改;
有兴趣的客户可对照开发手册根据需要自行修改。
*********************************************