C:\Users\D00036\Desktop\AL02_Test\AL02_STM32\Src\tim.c
: TIM.c
: This file provides code for the configuration
of the TIM instances.
:Dhg
:2017-12-09
:该程序使用STM32 自带ADC对MIC进行采样或者对存在FLASH里的指定
声音文件进行播放,程序使用HAL库进行实验,原理简单,易懂!
(1)目前采样频率为44khz,对MIC采样时注意前级运放的噪音控制,目前
本人实验使用MAX9812芯片效果较好,自己搭建的放大电路没有调整好!
(2)目前播放指定音质采用的时WAV文件,16位声音数据;目前程序使用的
是单路播放输出,TM8211是双路16位DAC;有兴趣的朋友可以自己尝试!
******************************************************************************
* File Name
* Description
*
* Auther
* Date
* Note
1 /**
2
3
4
5
6
7
8
9
10
11
12
13
14
15 ******************************************************************************
16
17
18 /* Includes ------------------------------------------------------------------*/
19 #include "tim.h"
20
21 /* USER CODE BEGIN 0 */
22 #include "adc.h"
23 #include "gpio.h"
24
25 uint16_t ADC1ConvertedValue;
26
27 uint16_t Data1;
28 uint32_t Number = 44;
29 volatile uint16_t Data_tmp;
30
31 /* USER CODE END 0 */
32
33 TIM_HandleTypeDef htim1;
34
35 /* TIM1 init function */
36 void MX_TIM1_Init(void)
37 {
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
htim1.Instance = TIM1;
htim1.Init.Prescaler = 0;
htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
htim1.Init.Period = 1632 - 1;
htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim1.Init.RepetitionCounter = 0;
if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
{
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
{
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
*/
}
}
TIM_ClockConfigTypeDef sClockSourceConfig;
TIM_MasterConfigTypeDef sMasterConfig;
_Error_Handler(__FILE__, __LINE__);
Page 1
C:\Users\D00036\Desktop\AL02_Test\AL02_STM32\Src\tim.c
_Error_Handler(__FILE__, __LINE__);
}
/* USER CODE END TIM1_MspInit 0 */
/* Peripheral clock enable */
__HAL_RCC_TIM1_CLK_ENABLE();
/* USER CODE END TIM1_MspInit 1 */
}
if(tim_baseHandle->Instance==TIM1)
{
/* USER CODE BEGIN TIM1_MspInit 0 */
/* TIM1 interrupt Init */
HAL_NVIC_SetPriority(TIM1_UP_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(TIM1_UP_IRQn);
/* USER CODE BEGIN TIM1_MspInit 1 */
62
63
64
65 }
66
67 void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
68 {
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85 }
86
87 void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
88 {
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104 }
105
106 /* USER CODE BEGIN 1 */
107
108 /******************************PLAY MIC SAMPLING
if(tim_baseHandle->Instance==TIM1)
{
/* USER CODE BEGIN TIM1_MspDeInit 0 */
/* USER CODE END TIM1_MspDeInit 1 */
}
/* Peripheral clock disable */
__HAL_RCC_TIM1_CLK_DISABLE();
/* TIM1 interrupt Deinit */
HAL_NVIC_DisableIRQ(TIM1_UP_IRQn);
/* USER CODE BEGIN TIM1_MspDeInit 1 */
/* USER CODE END TIM1_MspDeInit 0 */
if (htim->Instance == htim1.Instance)
{
SOUND****************************************************/
109 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
110 {
111
112
113
114
115
116
117
118
119
120
121
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, 50);
ADC1ConvertedValue = HAL_ADC_GetValue(&hadc1);
}
if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC))
{
Page 2
C:\Users\D00036\Desktop\AL02_Test\AL02_STM32\Src\tim.c
Data_tmp = ADC1ConvertedValue * 2;
if(Data_tmp == Data1 ){}
else
{
122
123
124
125
126
127
128
129
130
131 /*********************************PLAY ASSIGN
TM8211_Drive(Data_tmp ,Data_tmp);
Data1 = Data_tmp;
}
SOUND*************************************************/
Data_tmp = (SOUND_DATA[Number + 1] << 8)|(SOUND_DATA[Number]) ;
if(Number > 48000)
{
TM8211_Drive(Data_tmp ,Data_tmp);
Data1 = Data_tmp;
if(Data_tmp == Data1 ){}
else
{
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153 }
154
155 /*********************************ASSIGN SOUND
Number = 44;
HAL_TIM_Base_Stop_IT(&htim1);
Number += 4;
}
}
else
{
}
}
CODE*************************************************/
156 const uint8_t SOUND_DATA[ 48000 ]= {
157 0x52, 0x49, 0x46, 0x46, 0x46, 0xdd, 0x0a, 0x00, 0x57, 0x41, 0x56, 0x45, 0x66, 0x6d,
0x74, 0x20,
158 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x80, 0x3e, 0x00, 0x00, 0x00, 0xfa,
0x00, 0x00,
159 0x04, 0x00, 0x10, 0x00, 0x4c, 0x49, 0x53, 0x54, 0x22, 0xdd, 0x0a, 0x00, 0x49, 0x4e,
0x46, 0x4f,
160 0x49, 0x53, 0x46, 0x54, 0x0e, 0x00, 0x00, 0x00, 0x4c, 0x61, 0x76, 0x66, 0x35, 0x37,
0x2e, 0x34,
161 0x31, 0x2e, 0x31, 0x30, 0x30, 0x00, 0x64, 0x61, 0x74, 0x61, 0x00, 0xdd, 0x0a, 0x00,
0x00, 0x00,
162 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
163 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
164 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
165 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
166 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
167 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
168 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
Page 3
C:\Users\D00036\Desktop\AL02_Test\AL02_STM32\Src\tim.c
169 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
170 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
171 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
172 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
173 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
174 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
175 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
176 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
177 /********************************此处省略NNNNN个数据*************************************
*****/
178 };
179 /* USER CODE END 1 */
180
181 /**
182 * @}
183 */
184
185 /**
186 * @}
187 */
188
189 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
190
Page 4