- TIM3_Init(499,71); //基带信号
- u8 num=0;
- void TIM3_IRQHandler(void)
- {
- if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
- {
- num++;
- switch (num)
- {
- case 1: Base_Signal = 1; break;
- case 2: Base_Signal = 0; break;
- case 3: Base_Signal = 0; break;
- case 4: Base_Signal = 0; break;
- case 5: Base_Signal = 1; break;
- case 6: Base_Signal = 0; break;
- case 7: Base_Signal = 1; break;
- case 8: Base_Signal = 0; break; //pn码序列
- }
- if(num == 8)
- num = 0;
- TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
- }
- }
接下来要产生载波,载波就是正弦波无疑。这里笔者的载波频率要求是4khz和8khz。正弦波的产生用的是stm32的DMA+DAC+TIM2。
正弦波的数据用正弦波数据发生器产生,采样点数64,精度12位,保存在Sine12bit[]数组,但是传送给DMA的正弦波数据不是这些原始的数据,而是将这些数据进行了进一步的处理:
- uint16_t Sine12bit[64] = {
- 0x7FF,0x8C8,0x98E,0xA51,0xB0F,0xBC4,0xC71,0xD12,0xDA7,0xE2E,0xEA5,0xF0D,0xF63,0xFA6,0xFD7,0xFF5
- ,0xFFE,0xFF5,0xFD7,0xFA6,0xF63,0xF0D,0xEA5,0xE2E,0xDA7,0xD12,0xC71,0xBC4,0xB0F,0xA51,0x98E,0x8C8
- ,0x7FF,0x736,0x670,0x5AD,0x4EF,0x43A,0x38D,0x2EC,0x257,0x1D0,0x159,0x0F1,0x09B,0x058,0x027,0x009
- ,0x000,0x009,0x027,0x058,0x09B,0x0F1,0x159,0x1D0,0x257,0x2EC,0x38D,0x43A,0x4EF,0x5AD,0x670,0x736
- };
- uint32_t Idx = 0;
- int main(void)
- {
- ... //省去无关代码
- for (Idx = 0; Idx < 64; Idx++)
- {
- Sine12bit[Idx] = Sine12bit[Idx]*8/10+500; //防止出现底部失真
- }
- ... //省去无关代码
- }