IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32F103C8T6连接LD3320语音识别模块(USART) -> 正文阅读

[嵌入式]STM32F103C8T6连接LD3320语音识别模块(USART)

吹水

写了快半年go语言吧,毕业后还是打算从事嵌入式,重新捡起来,调这个我犯了个很睿智的问题,调了两天才发现!就是配置串口相关的参数!一定要配置对!开始我通过串口和ld3320连接,有数据传输,32的串口也能接收到电脑发的数据,但是两个连起来就是拿不到数据,最后洗澡的时候才想起来ld3320给的波特率不是115200而是9600

ld3320那边的程序如何修改就不贴了,网上蛮多的。

硬件平台

在这里插入图片描述
在这里插入图片描述

工程代码

ld3320连接USART1,通过透传的方式将获取到的数据通过USART2打印出来

main.c

#include "stm32f10x.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "led.h"
#include "usart.h"
#include "delay.h"

int main()
{
		Led_init();
		usart1_init();
	    usart2_init();
        initSysTick();
	    printf("main start!");
	
	    GPIO_ResetBits(GPIOC, GPIO_Pin_13);
		delay_ms(300);
        GPIO_SetBits(GPIOC, GPIO_Pin_13);
}

//串口中断
void USART1_IRQHandler(void)
{
	int temp;
	while(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET){
        temp = USART_ReceiveData(USART1);
        printf("%c",temp);
	    USART_ClearITPendingBit(USART1,USART_IT_RXNE);
	}
    
}


delay.c

#include "stm32f10x.h"
#include "delay.h"

void initSysTick(void)
{
		SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //éè??ê±?ó?′8·???
		SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk;            //ê1?ü?D??
		SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;             //?a?¨ê±?÷
		SysTick->LOAD = 9;                                    //??òaéè??ò?????×°???μ
}
/**
 * 1|?ü£o?¢?????óê±oˉêy
 * 2?êy£oxus £o??ì??óê±ê±?? (μ¥??£o?¢??)
 * ·μ???μ£oNone
 */
void delay_us(u32 xus)
{
		SysTick->LOAD = 9 * xus;                              //??9′??a1us£?xus?ò??×°???μòa*9
		SysTick->VAL = 0;                                     //??êy?÷1éá?
		while (!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk));//μè′y??êyíê3é
}

/**
 * 1|?ü£ooá?????óê±oˉêy
 * 2?êy£oxms £o??ì??óê±ê±?? (μ¥??£ooá??)
 * ·μ???μ£oNone
 */
void delay_ms(u32 xms)
{
		SysTick->LOAD = 9000;                                  //??9′??a1ms£?1000′??a1s
		SysTick->VAL = 0;                                      //??êy?÷1éá?
		while (xms--)
		{
				while (!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk));//μè′yμ¥′???êyíê3é
		}
}

delay.h

#ifndef _DELAY_H_
#define _DELAY_H_

#include "stm32f10x.h"
void initSysTick(void);
void delay_us(u32 xus);
void delay_ms(u32 xms);

#endif

usart.c

#include "usart.h"
#include "stm32f10x.h"

void usart1_init(void)
{
	GPIO_InitTypeDef  gpio_init;
	USART_InitTypeDef usartStruct;
	NVIC_InitTypeDef  nvic_initStruct;
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	
	//1.????ê±?ó£oGPIO?úμ?ê±?ó£?òy???′ó?μ?ê±?ó£?′??úμ?ê±?ó
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
	
	//2.????GPIOμ??á11ì?
	//USART1 TX --- PA9,RX --- PA10
	//2.1 TX
	gpio_init.GPIO_Mode = GPIO_Mode_AF_PP;
	gpio_init.GPIO_Pin = GPIO_Pin_9;
	gpio_init.GPIO_Speed = GPIO_Speed_10MHz;
	
	GPIO_Init(GPIOA,&gpio_init);
	
	//2.2 RX
	gpio_init.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	gpio_init.GPIO_Pin = GPIO_Pin_10;
	
	GPIO_Init(GPIOA,&gpio_init);
	
	//3.????′??úμ??á11ì?
	usartStruct.USART_BaudRate = 9600;
	usartStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
	usartStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
	usartStruct.USART_Parity = USART_Parity_No;
	usartStruct.USART_StopBits = USART_StopBits_1;
	usartStruct.USART_WordLength = USART_WordLength_8b;
	
	USART_Init(USART1,&usartStruct);
	USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//????′??ú?D??
	USART_Cmd(USART1, ENABLE );
	
	nvic_initStruct.NVIC_IRQChannel = USART1_IRQn;
	nvic_initStruct.NVIC_IRQChannelPreemptionPriority = 1;
	nvic_initStruct.NVIC_IRQChannelSubPriority = 1;
	nvic_initStruct.NVIC_IRQChannelCmd = ENABLE;
	
	NVIC_Init(&nvic_initStruct);

}

void usart2_init(void)
{
	GPIO_InitTypeDef  gpio_init;
	USART_InitTypeDef usartStruct;
//	NVIC_InitTypeDef  nvic_initStruct;
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	
	//1.????ê±?ó£oGPIO?úμ?ê±?ó£?òy???′ó?μ?ê±?ó£?′??úμ?ê±?ó
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
	
	//2.????GPIOμ??á11ì?	
	//USART2 TX --- PA2,RX --- PA3
	gpio_init.GPIO_Mode = GPIO_Mode_AF_PP;
	gpio_init.GPIO_Pin = GPIO_Pin_2;
	gpio_init.GPIO_Speed = GPIO_Speed_10MHz;
	GPIO_Init(GPIOA,&gpio_init);
	
	gpio_init.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	gpio_init.GPIO_Pin = GPIO_Pin_3;
	GPIO_Init(GPIOA,&gpio_init);
	
	//3.????′??úμ??á11ì?
	usartStruct.USART_BaudRate = 115200;
	usartStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
	usartStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
	usartStruct.USART_Parity = USART_Parity_No;
	usartStruct.USART_StopBits = USART_StopBits_1;
	usartStruct.USART_WordLength = USART_WordLength_8b;
	
	USART_Init(USART2,&usartStruct);
//	USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);//????′??ú?D??
	USART_Cmd(USART2, ENABLE );
	
//	nvic_initStruct.NVIC_IRQChannel = USART2_IRQn;
//	nvic_initStruct.NVIC_IRQChannelPreemptionPriority = 1;
//	nvic_initStruct.NVIC_IRQChannelSubPriority = 2;
//	nvic_initStruct.NVIC_IRQChannelCmd = ENABLE;
//	
//	NVIC_Init(&nvic_initStruct);

	
}

//·a×°á?ò???·¢?í×?·?
void usartSendByte(USART_TypeDef* USARTx, uint16_t Data)
{
	USART_SendData(USARTx,Data);
	while(USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET);

}

//·¢?í×?·?′?
void usartSendStr(USART_TypeDef* USARTx,char *str)
{
	uint16_t i = 0;
	do{
		usartSendByte(USARTx,*(str+i));
		i++;
	}while(*(str+i) != '\0');

	//?D??ê?·?·¢?ííê
	while(USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET);
}

int fputc(int ch,FILE *f)
{
	USART_SendData(USART2,(uint8_t)ch);
	while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
	
	return (ch);
}

int fgetc(FILE *f)
{
	while(USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == RESET);
	
	return (int) USART_ReceiveData(USART2);
}

usart.h

#include "stm32f10x.h"
#include <stdio.h>

void usart1_init(void);
void usart2_init(void);
void usartSendByte(USART_TypeDef* USARTx, uint16_t Data);
void usartSendStr(USART_TypeDef* USARTx,char *str);

led.c

#include "stm32f10x.h"
#include "led.h"

void Led_init(void)
{
	GPIO_InitTypeDef Led_initStructer;
	
	//1.ê1?üAPB2μ?ê±?óGPIO
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
	
	//2.?á11ì?????
	Led_initStructer.GPIO_Mode 	= GPIO_Mode_Out_PP;
	Led_initStructer.GPIO_Pin	  = GPIO_Pin_13;
	Led_initStructer.GPIO_Speed = GPIO_Speed_10MHz;
	
	GPIO_Init(GPIOC, &Led_initStructer);
}

led.h

#include "stm32f10x.h"
void Led_init(void);

再次注意!ld3320波特率为9600
在这里插入图片描述

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-05-11 16:35:53  更:2022-05-11 16:36:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 13:03:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码