STM32F103RC单片机ADC1使用TIM1自动触发注入通道组的AD转换

news/2024/12/29 5:28:10/

 

 

版权声明:本文为博主原创文章,欢迎转载 https://blog.csdn.net/ZLK1214/article/details/77746783

注意:ADC外设最大允许的时钟频率为14MHz,打开ADC外设前必须先配置好分频系数!

72MHz / 6 = 12MHz,转换速率为每个1.17μs。

【程序】

 

 
  1. #include <stdio.h>

  2. #include <stm32f10x.h>

  3.  
  4. uint8_t injected_count = 0; // 转换的注入通道组数

  5. uint8_t last_pos; // 定时器1停止时剩余规则通道个数(DMA位置)

  6. uint16_t injected_result[4][5]; // 注入通道转换结果, 包括DMA位置

  7.  
  8. int fputc(int ch, FILE *fp)

  9. {

  10. if (fp == stdout)

  11. {

  12. if (ch == '\n')

  13. {

  14. while ((USART1->SR & USART_SR_TXE) == 0);

  15. USART1->DR = '\r';

  16. }

  17. while ((USART1->SR & USART_SR_TXE) == 0);

  18. USART1->DR = ch;

  19. }

  20. return ch;

  21. }

  22.  
  23. int main(void)

  24. {

  25. uint8_t i, j;

  26. uint16_t result[10][16]; // 规则通道转换结果

  27.  
  28. // 打开外设时钟

  29. RCC->CFGR |= RCC_CFGR_ADCPRE_1; // ADC时钟设为12MHz, 最大允许时钟为14MHz

  30. RCC->AHBENR = RCC_AHBENR_DMA1EN;

  31. RCC->APB2ENR = RCC_APB2ENR_ADC1EN | RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPBEN | RCC_APB2ENR_TIM1EN | RCC_APB2ENR_USART1EN;

  32.  
  33. GPIOA->CRH = 0x444444bf; // 串口发送端设为复用推挽50MHz输出, TIM1输出比较端口1设为复用开漏50MHz输出

  34. GPIOA->CRL = 0x00000004; // ADC1通道1~7设为模拟

  35. GPIOB->CRL = 0x44444400; // ADC1通道8~9设为模拟

  36.  
  37. TIM1->ARR = 15; // PWM周期: 16us

  38. TIM1->PSC = 71; // 计时频率: 1MHz

  39. TIM1->RCR = 3; // 产生4个上升沿信号

  40. TIM1->CR1 = TIM_CR1_OPM | TIM_CR1_URS; // 定时器自动停止; UG不置位UIF

  41. TIM1->EGR = TIM_EGR_UG; // 装入ARR, PSC和RCR寄存器的值

  42.  
  43. TIM1->DIER = TIM_DIER_UIE; // 当定时器自动停止时触发中断

  44. NVIC_EnableIRQ(TIM1_UP_IRQn);

  45.  
  46. TIM1->CR2 = TIM_CR2_MMS_2; // TRGO=OC1REF, 用于触发注入通道转换

  47. TIM1->BDTR = TIM_BDTR_MOE; // 打开输出总开关

  48. TIM1->CCR1 = 11; // 上升沿的产生位置

  49. TIM1->CCMR1 = TIM_CCMR1_OC1M; // PWM mode 2

  50. TIM1->CCER = TIM_CCER_CC1E; // 打开输出比较通道1

  51.  
  52. // 规则通道和注入通道序列

  53. // SQ10: TS, SQ16: VREF

  54. ADC1->SQR1 = ADC_SQR1_L | (ADC_SQR1_SQ16_4 | ADC_SQR1_SQ16_0) | (ADC_SQR1_SQ15_2 | ADC_SQR1_SQ15_0) | ADC_SQR1_SQ14_2 | (ADC_SQR1_SQ13_1 | ADC_SQR1_SQ13_0);

  55. ADC1->SQR2 = ADC_SQR2_SQ12_1 | ADC_SQR2_SQ11_0 | ADC_SQR2_SQ10_4 | (ADC_SQR2_SQ9_3 | ADC_SQR2_SQ9_0) | ADC_SQR2_SQ8_3 | (ADC_SQR2_SQ7_2 | ADC_SQR2_SQ7_1 | ADC_SQR2_SQ7_0);

  56. ADC1->SQR3 = (ADC_SQR3_SQ6_2 | ADC_SQR3_SQ6_1) | (ADC_SQR3_SQ5_2 | ADC_SQR3_SQ5_0) | ADC_SQR3_SQ4_2 | (ADC_SQR3_SQ3_1 | ADC_SQR3_SQ3_0) | ADC_SQR3_SQ2_1 | ADC_SQR3_SQ1_0;

  57. ADC1->JSQR = ADC_JSQR_JL | ADC_JSQR_JSQ4_2 | (ADC_JSQR_JSQ3_1 | ADC_JSQR_JSQ3_0) | ADC_JSQR_JSQ2_1 | ADC_JSQR_JSQ1_0;

  58.  
  59. ADC1->CR1 = ADC_CR1_SCAN | ADC_CR1_JEOCIE; // 规则通道组配置为多通道模式(必须用DMA收集数据); 当注入通道组转换完毕时触发中断

  60. ADC1->CR2 = ADC_CR2_TSVREFE | ADC_CR2_JEXTTRIG | ADC_CR2_DMA | ADC_CR2_CONT | ADC_CR2_ADON; // 打开16~17通道; 允许外部事件注入; 规则通道组循环转换; 打开ADC1

  61. NVIC_EnableIRQ(ADC1_2_IRQn);

  62.  
  63. USART1->BRR = 0x271; // 波特率: 115200

  64. USART1->CR1 = USART_CR1_UE | USART_CR1_TE; // 允许发送

  65.  
  66. // 配置ADC1_DMA

  67. DMA1_Channel1->CMAR = (uint32_t)result[0];

  68. DMA1_Channel1->CPAR = (uint32_t)&ADC1->DR;

  69. DMA1_Channel1->CNDTR = 160;

  70. DMA1_Channel1->CCR = DMA_CCR1_MSIZE_0 | DMA_CCR1_PSIZE_0 | DMA_CCR1_MINC | DMA_CCR1_EN;

  71.  
  72. ADC1->CR2 = ADC1->CR2; // 开始转换规则通道

  73. TIM1->CR1 |= TIM_CR1_CEN; // 开启定时器1

  74. while ((DMA1->ISR & DMA_ISR_TCIF1) == 0) // 若DMA正在搬运数据

  75. {

  76. if (DMA1_Channel1->CNDTR < 16 && (ADC1->CR2 & ADC_CR2_CONT)) // 转换最后一组时关闭CONT循环模式, 以免产生新数据使EOC不为0

  77. ADC1->CR2 &= ~ADC_CR2_CONT;

  78. }

  79.  
  80. // 显示定时器1自动关闭时DMA的位置

  81. if ((TIM1->CR1 & TIM_CR1_CEN) == 0)

  82. printf("TIM1 stopped! CNDTR=%d\n", last_pos);

  83.  
  84. // 显示规则通道的数据

  85. for (i = 0; i < 10; i++)

  86. {

  87. printf("[Regular %d]", i + 1);

  88. for (j = 0; j < 16; j++)

  89. printf(" %d", result[i][j]);

  90. printf("\n");

  91. }

  92.  
  93. // 显示注入通道的数据

  94. for (i = 0; i < injected_count; i++)

  95. {

  96. printf("[Injected %d]", i + 1);

  97. for (j = 1; j <= 4; j++)

  98. printf(" %d", injected_result[i][j]);

  99. printf(" (CNDTR=%d)\n", injected_result[i][0]);

  100. }

  101.  
  102. ADC1->SR &= ~ADC_SR_STRT;

  103. printf("ADC1->SR=0x%02x\n", ADC1->SR);

  104.  
  105. // 等待USART1发送完毕并关闭外设

  106. while ((USART1->SR & USART_SR_TC) == 0);

  107. USART1->CR1 = 0;

  108. ADC1->CR2 = 0;

  109.  
  110. // 进入Stop低功耗模式

  111. SCB->SCR = SCB_SCR_SLEEPDEEP;

  112. while (1)

  113. __WFI();

  114. }

  115.  
  116. // 注入通道组转换完成时触发的中断

  117. void ADC1_2_IRQHandler(void)

  118. {

  119. ADC1->SR &= ~(ADC_SR_EOC | ADC_SR_JEOC | ADC_SR_JSTRT);

  120. injected_result[injected_count][0] = DMA1_Channel1->CNDTR;

  121. injected_result[injected_count][1] = ADC1->JDR1;

  122. injected_result[injected_count][2] = ADC1->JDR2;

  123. injected_result[injected_count][3] = ADC1->JDR3;

  124. injected_result[injected_count][4] = ADC1->JDR4;

  125. injected_count++;

  126. }

  127.  
  128. void TIM1_UP_IRQHandler(void)

  129. {

  130. TIM1->SR &= ~TIM_SR_UIF; // 清除中断标志

  131. last_pos = DMA1_Channel1->CNDTR; // 记录DMA的位置

  132. ADC1->CR2 &= ~ADC_CR2_JEXTTRIG; // 禁止外部触发注入通道组的转换

  133. TIM1->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_0; // 熄灭PA8上的LED灯

  134. // 不能在这里执行printf, 否则CONT位将无法及时清除而产生新数据

  135. }

【运行结果】

 
  1. TIM1 stopped! CNDTR=122

  2. [Regular 1] 1638 1714 598 225 1566 3085 3572 1834 3469 1576 1636 1716 598 225 1565 1770

  3. [Regular 2] 1639 1714 597 224 1568 3084 3569 1832 3468 2157 1638 1715 597 225 1564 1772

  4. [Regular 3] 1638 1713 597 224 1567 3084 3570 1833 3469 2159 1638 1713 597 225 1567 1773

  5. [Regular 4] 1637 1714 597 225 1567 3085 3571 1834 3469 2158 1639 1715 598 224 1566 1771

  6. [Regular 5] 1638 1715 598 224 1566 3087 3568 1834 3470 2157 1638 1714 596 223 1569 1766

  7. [Regular 6] 1638 1714 598 224 1567 3085 3570 1832 3470 2158 1638 1715 598 225 1567 1773

  8. [Regular 7] 1638 1715 597 223 1565 3086 3569 1832 3469 2158 1637 1714 598 224 1566 1772

  9. [Regular 8] 1638 1714 598 225 1565 3085 3568 1833 3469 2158 1638 1715 598 225 1566 1770

  10. [Regular 9] 1638 1714 598 225 1568 3084 3571 1833 3470 2158 1638 1714 597 224 1565 1771

  11. [Regular 10] 1638 1714 597 224 1566 3084 3569 1833 3469 2158 1638 1713 598 224 1568 1765

  12. [Injected 1] 1636 1714 597 224 (CNDTR=151)

  13. [Injected 2] 1637 1715 597 224 (CNDTR=142)

  14. [Injected 3] 1636 1714 596 224 (CNDTR=133)

  15. [Injected 4] 1638 1714 597 225 (CNDTR=124)

  16. ADC1->SR=0x00

 

在上面的程序中,TIM1的计数方向为向上计数,每次比较匹配时都触发一次注入。事件源为TIM1_TRGO事件,JEXTSEL=000。

如果计数方向既向上又向下,则只有向上的那一次比较匹配才能触发注入,向下的那一次无效,因为只有TRGO=OCxREF信号的上升沿能够触发ADC注入。

对于TIMn_TRGO类事件,若TRGO=OCxREF,则只有OCxREF的上升沿才能触发注入,与CCxP的值无关。

对于TIMn_CCx类事件,若CCxP=0,则是OCxREF的上升沿触发注入;若CCxP=1,则是OCxREF的下降沿触发注入。对应的GPIO口输出的电平为OCxREF ^ CCxP。

 

当SCAN=0时,L和JL的值无效,ADC始终只转换序列中的第一个通道。

当SCAN=1时,ADC转换组中所有的通道,通道的个数由L或JL指定。整个通道组转换完成时EOC才置1,此时DR中的内容为最后一个通道的数据,读DR寄存器后EOC自动清零。所以只要SCAN=1,规则通道的数据就只能由DMA来采集。如果打开了EOCIE中断,则在中断中无需手动清除EOC标志。因为DMA读取最后一个通道的数据后,EOC会自动清零。

CONT(循环模式)只对规则通道有效,对注入通道无效。

 

如果JAUTO=1,则注入通道组的转换不需要由外部信号触发。规则通道组转换完成后将会自动转换注入通道组。

 

 
  1. #include <stdio.h>

  2. #include <stm32f10x.h>

  3.  
  4. uint8_t injected_count = 0; // 转换的注入通道组数

  5. uint16_t injected_result[10][5]; // 注入通道转换结果, 包括DMA位置

  6.  
  7. void delay(void)

  8. {

  9. uint32_t i;

  10. for (i = 0; i < 2000000; i++);

  11. }

  12.  
  13. int fputc(int ch, FILE *fp)

  14. {

  15. if (fp == stdout)

  16. {

  17. if (ch == '\n')

  18. {

  19. while ((USART1->SR & USART_SR_TXE) == 0);

  20. USART1->DR = '\r';

  21. }

  22. while ((USART1->SR & USART_SR_TXE) == 0);

  23. USART1->DR = ch;

  24. }

  25. return ch;

  26. }

  27.  
  28. int main(void)

  29. {

  30. uint8_t i, j;

  31. uint16_t result[10][16]; // 规则通道转换结果

  32.  
  33. // 打开外设时钟

  34. RCC->CFGR |= RCC_CFGR_ADCPRE_1; // ADC时钟设为12MHz, 最大允许时钟为14MHz

  35. RCC->AHBENR = RCC_AHBENR_DMA1EN;

  36. RCC->APB1ENR = RCC_APB1ENR_PWREN;

  37. RCC->APB2ENR = RCC_APB2ENR_ADC1EN | RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPBEN | RCC_APB2ENR_USART1EN;

  38.  
  39. GPIOA->CRH = 0x444444b4; // 串口发送端设为复用推挽50MHz输出

  40. GPIOA->CRL = 0x00000008; // ADC1通道1~7设为模拟, PA0待机唤醒按键设为带下拉电阻输入

  41. GPIOB->CRL = 0x44444400; // ADC1通道8~9设为模拟

  42.  
  43. // 规则通道和注入通道序列

  44. // SQ10: TS, SQ16: VREF

  45. ADC1->SQR1 = ADC_SQR1_L | (ADC_SQR1_SQ16_4 | ADC_SQR1_SQ16_0) | (ADC_SQR1_SQ15_2 | ADC_SQR1_SQ15_0) | ADC_SQR1_SQ14_2 | (ADC_SQR1_SQ13_1 | ADC_SQR1_SQ13_0);

  46. ADC1->SQR2 = ADC_SQR2_SQ12_1 | ADC_SQR2_SQ11_0 | ADC_SQR2_SQ10_4 | (ADC_SQR2_SQ9_3 | ADC_SQR2_SQ9_0) | ADC_SQR2_SQ8_3 | (ADC_SQR2_SQ7_2 | ADC_SQR2_SQ7_1 | ADC_SQR2_SQ7_0);

  47. ADC1->SQR3 = (ADC_SQR3_SQ6_2 | ADC_SQR3_SQ6_1) | (ADC_SQR3_SQ5_2 | ADC_SQR3_SQ5_0) | ADC_SQR3_SQ4_2 | (ADC_SQR3_SQ3_1 | ADC_SQR3_SQ3_0) | ADC_SQR3_SQ2_1 | ADC_SQR3_SQ1_0;

  48. ADC1->JSQR = ADC_JSQR_JL | ADC_JSQR_JSQ4_2 | (ADC_JSQR_JSQ3_1 | ADC_JSQR_JSQ3_0) | ADC_JSQR_JSQ2_1 | ADC_JSQR_JSQ1_0;

  49.  
  50. ADC1->CR1 = ADC_CR1_JAUTO | ADC_CR1_SCAN | ADC_CR1_JEOCIE; // 规则通道组转换完毕后自动开始转换注入通道组; 规则通道组配置为多通道模式(必须用DMA收集数据); 当注入通道组转换完毕时触发中断

  51. ADC1->CR2 = ADC_CR2_TSVREFE | ADC_CR2_DMA | ADC_CR2_CONT | ADC_CR2_ADON; // 打开16~17通道; 规则通道组循环转换; 打开ADC1

  52. NVIC_EnableIRQ(ADC1_2_IRQn);

  53.  
  54. USART1->BRR = 0x271; // 波特率: 115200

  55. USART1->CR1 = USART_CR1_UE | USART_CR1_TE; // 允许发送

  56.  
  57. // 配置ADC1_DMA

  58. DMA1_Channel1->CMAR = (uint32_t)result[0];

  59. DMA1_Channel1->CPAR = (uint32_t)&ADC1->DR;

  60. DMA1_Channel1->CNDTR = 160;

  61. DMA1_Channel1->CCR = DMA_CCR1_MSIZE_0 | DMA_CCR1_PSIZE_0 | DMA_CCR1_MINC | DMA_CCR1_EN;

  62.  
  63. ADC1->CR2 = ADC1->CR2; // 开始转换规则通道

  64. while ((DMA1->ISR & DMA_ISR_TCIF1) == 0) // 若DMA正在搬运数据

  65. {

  66. if (DMA1_Channel1->CNDTR < 16 && (ADC1->CR2 & ADC_CR2_CONT)) // 转换最后一组时关闭CONT循环模式, 以免产生新数据使EOC不为0

  67. ADC1->CR2 &= ~ADC_CR2_CONT;

  68. }

  69.  
  70. // 显示规则通道的数据

  71. for (i = 0; i < 10; i++)

  72. {

  73. printf("[Regular %d]", i + 1);

  74. for (j = 0; j < 16; j++)

  75. printf(" %d", result[i][j]);

  76. printf("\n");

  77. }

  78.  
  79. // 显示注入通道的数据

  80. for (i = 0; i < injected_count; i++)

  81. {

  82. printf("[Injected %d]", i + 1);

  83. for (j = 1; j <= 4; j++)

  84. printf(" %d", injected_result[i][j]);

  85. printf(" (CNDTR=%d)\n", injected_result[i][0]);

  86. }

  87.  
  88. ADC1->SR &= ~ADC_SR_STRT;

  89. printf("ADC1->SR=0x%02x\n", ADC1->SR);

  90.  
  91. // 进入待机模式

  92. while ((USART1->SR & USART_SR_TC) == 0); // 等待USART1发送完毕

  93. while (GPIOA->IDR & GPIO_IDR_IDR0)

  94. delay(); // WKUP按键消抖

  95. SCB->SCR = SCB_SCR_SLEEPDEEP;

  96. PWR->CR = PWR_CR_PDDS | PWR_CR_CWUF;

  97. PWR->CSR = PWR_CSR_EWUP;

  98. __WFI();

  99.  
  100. return 0;

  101. }

  102.  
  103. // 注入通道组转换完成时触发的中断

  104. void ADC1_2_IRQHandler(void)

  105. {

  106. ADC1->SR &= ~(ADC_SR_EOC | ADC_SR_JEOC | ADC_SR_JSTRT);

  107. injected_result[injected_count][0] = DMA1_Channel1->CNDTR;

  108. injected_result[injected_count][1] = ADC1->JDR1;

  109. injected_result[injected_count][2] = ADC1->JDR2;

  110. injected_result[injected_count][3] = ADC1->JDR3;

  111. injected_result[injected_count][4] = ADC1->JDR4;

  112. injected_count++;

  113. }

【运行结果】

 
  1. [Regular 1] 1636 1713 597 224 1565 3084 3570 1833 3471 2083 1638 1713 597 224 1565 1772

  2. [Regular 2] 1637 1713 597 224 1566 3084 3569 1832 3470 2158 1637 1714 597 223 1566 1773

  3. [Regular 3] 1639 1713 597 222 1568 3084 3572 1833 3467 2157 1636 1713 596 223 1564 1771

  4. [Regular 4] 1637 1713 596 223 1565 3085 3569 1833 3470 2158 1638 1713 597 224 1566 1771

  5. [Regular 5] 1637 1713 596 225 1566 3084 3570 1833 3470 2158 1637 1713 596 223 1567 1772

  6. [Regular 6] 1637 1713 596 223 1567 3086 3569 1833 3469 2157 1637 1714 595 223 1565 1771

  7. [Regular 7] 1637 1713 597 224 1565 3086 3568 1834 3470 2158 1637 1714 597 225 1566 1771

  8. [Regular 8] 1637 1713 596 225 1565 3085 3569 1832 3470 2158 1637 1713 597 223 1567 1774

  9. [Regular 9] 1637 1713 596 223 1567 3084 3569 1832 3470 2158 1638 1713 596 224 1565 1771

  10. [Regular 10] 1637 1713 597 224 1564 3085 3569 1833 3470 2158 1637 1713 597 224 1565 1771

  11. [Injected 1] 1638 1714 597 224 (CNDTR=144)

  12. [Injected 2] 1637 1713 596 224 (CNDTR=128)

  13. [Injected 3] 1637 1715 596 223 (CNDTR=112)

  14. [Injected 4] 1638 1714 595 223 (CNDTR=96)

  15. [Injected 5] 1637 1713 597 223 (CNDTR=80)

  16. [Injected 6] 1637 1713 597 223 (CNDTR=64)

  17. [Injected 7] 1638 1715 597 224 (CNDTR=48)

  18. [Injected 8] 1638 1712 596 222 (CNDTR=32)

  19. [Injected 9] 1637 1713 597 222 (CNDTR=16)

  20. [Injected 10] 1637 1714 597 226 (CNDTR=0)

  21. ADC1->SR=0x00


http://www.ppmy.cn/news/481913.html

相关文章

ADC芯片——AD7705最详细讲解(STM32)

目录 前言1. AD7705简介1.1 特性参数1.2 功能方框图1.3 引脚排列及其功能 2. 片内寄存器2.1 通信寄存器2.1.1 通讯寄存器手册说明2.1.2 通信寄存器配置&#xff08;RS20,RS10,RS00&#xff09; 2.2 设置寄存器2.2.1 设置寄存器手册说明2.2.2 设置寄存器配置&#xff08;RS20,RS…

ADC 信号调理电路设计——必要措施、实测验证和应用说明(转载)

转自周立功《面向AMetal框架与接口的编程&#xff08;上&#xff09;》 第二章 ADC 信号调理电路设计 2.3 必要措施 一个完整的采集电路框图详见图2.19&#xff0c;从传感器或信号源到最终的ADC 数据输出&#xff0c;中间需要经过输入范围调整、多通道复用等信号调理环节。除…

面试官:“同学,你做的这几个项目都不错。但怎么问QPS你就胡说呢?”

作者&#xff1a;小傅哥 博客&#xff1a;https://bugstack.cn 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; 这位同学&#xff0c;你比上一位面试者好多了&#xff0c;你的简历中做的几个项目都不错。既有业务项目&#xff0c;也有技术项目…

STM8 ADC读取数据异常问题的解决

做了一个stm8的一个测量电压电流的项目&#xff0c;发现adc通道通过一个10k电阻连接VCC&#xff0c;的时候ADC数据出来都是只有200多&#xff0c;按理说&#xff0c;10位adc应该出来1000多才对&#xff0c;由于adc出来的数据是十六位的&#xff0c;怀疑是串口发送数据的时候数据…

CC2640R2F学习笔记(27)——ADC使用

一、简介 CC2640R2F 的 ADC 是几位的、几个通道的? 12 位模数转换器 (ADC)、200MSPS、8 通道模拟多路复用器。 使用的是什么参考源&#xff1f; 参考源有两种&#xff0c;一种是内部的固定 4.3V 参考源&#xff0c;一种是内部的电池电压。 本文采用的 4.3V 固定参考源&#x…

RFSoC应用笔记 - RF数据转换器 -06- RFSoC关键配置之RF-ADC内部解析(四)

前言 RFSoC中最重要的部分是射频直采ADC和DAC的配置&#xff0c;因此了解内部相关原理结构可以帮助我们更好理解相关功能配置参数含义。本文参考官方手册&#xff0c;主要对RFSoC ADC的可编程逻辑数据接口、多频带操作、以及奈奎斯特区的操作进行介绍。 文章目录 前言RF-ADC …

Stm32f103 ADC 学习笔记

原文地址为&#xff1a; Stm32f103 ADC 学习笔记 在做有AD模块项目的时候遇到几个问题&#xff1a; 1&#xff0c; ADC配合DMA采样规则是怎样的。 2&#xff0c; ADC在DMA采可否不连续采样&#xff0c;以提高有效采样使用率和降低功耗。 3&#xff0c; 如何提高有效利用…

Zynq Ultrascale+ RF Data Coverter IP配置 - ADC

Zynq Ultrascale RF Data Coverter IP配置中的有关概念-ADC ADC xczu28dr-ffvg1517-2共有8个ADC,分布在4个Tile上&#xff0c;图为tile225&#xff0c;另外三个tile为226、227、228 4个tile各自拥有一个独立的PLL。2个12bit/DAC,2个mixer&#xff0c;Tile中的mixer是用于I/Q混…