[STM32F4] 谁帮我看一下我移植到ucosII的ADC采样程序,多谢啦!

[复制链接]
 楼主| wxjlive 发表于 2014-10-23 16:57 | 显示全部楼层 |阅读模式
本帖最后由 wxjlive 于 2014-10-23 17:02 编辑

本人水平很low,在ucoII上移植一个ADC采样程序都不是太会,麻烦大神帮我看看这个程序啊,哪方面需要改进呢,我把原程序和我移植后的程序给大家看一下,看哪里不对,板子是没反应,串口助手也没反应,哎!
源程序:
  1. #include "stm32f4xx.h"
  2. #include <stdio.h>
  3. #include "stm324xg_lcd.h"

  4. #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
  5. #define PRINT_ON_LCD
  6. #define  ADC1_DR_ADDRESS         ((uint32_t)0x4001204C) //ADC1 DR寄存器基地址

  7. ADC_InitTypeDef ADC_InitStructure;        //ADC初始化结构体声明
  8. DMA_InitTypeDef DMA_InitStructure;        //DMA初始化结构体声明
  9. __IO uint16_t ADCConvertedValue;     // ADC为12位模数转换器,只有ADCConvertedValue的低12位有效
  10. __IO uint16_t ADC1ConvertedValue = 0;
  11. __IO uint32_t ADC1ConvertedVoltage = 0;

  12. void ADC_GPIO_Configuration(void);
  13. void ADC1_CH13_DMA_Config(void);
  14. void Display(void);
  15. void Display_Init(void);

  16. static void Delay_ARMJISHU(__IO uint32_t nCount)
  17. {
  18.   for (; nCount != 0; nCount--)
  19.   {
  20.   }
  21. }

  22. void STM32_Shenzhou_COMInit(USART_InitTypeDef* USART_InitStruct)
  23. {
  24.   GPIO_InitTypeDef GPIO_InitStructure;
  25.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);        /* Enable GPIO clock */
  26.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); /* Enable UART clock */
  27.   GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);         /* Connect PXx to USARTx_Tx*/

  28.   /* Connect PXx to USARTx_Rx*/
  29.   GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);

  30.   /* Configure USART Tx as alternate function  */
  31.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  32.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  33.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;

  34.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  35.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  36.   GPIO_Init(GPIOA, &GPIO_InitStructure);

  37.   /* Configure USART Rx as alternate function  */
  38.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  39.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  40.   GPIO_Init(GPIOA, &GPIO_InitStructure);

  41.   USART_Init(USART1, USART_InitStruct);        /* USART configuration */
  42.   USART_Cmd(USART1, ENABLE); /* Enable USART */
  43. }

  44. void Printf_Init(void)
  45. {
  46.   USART_InitTypeDef USART_InitStructure;   
  47.   USART_InitStructure.USART_BaudRate = 115200;
  48.   USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  49.   USART_InitStructure.USART_StopBits = USART_StopBits_1;
  50.   USART_InitStructure.USART_Parity = USART_Parity_No;
  51.   USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  52.   USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

  53.   STM32_Shenzhou_COMInit(&USART_InitStructure);
  54. }

  55. int main(void)
  56. {
  57.   u16 ADCConvertedValueLocalTemp, ADCConvertedValueLocal, Precent = 0, Voltage = 0;
  58.   
  59.    /* 详见左侧工程窗口的STM32_EVAL中的Printf.c */
  60.   Printf_Init();
  61.   printf("\n\r\n");
  62.   printf("\n\r 论坛后续还会有更多精彩的示例,欢迎访问论坛交流与学习.");
  63.   printf("\n\r 本示例为AD转换示例,串口输出转换结果,模拟信号来自板上的电位器! \n\r");
  64.   printf("\n\r==============================================================================");
  65.   printf("\n\r");
  66.   /* ADC1 configuration *******************************************************/
  67.   /*  - Enable peripheral clocks                                              */
  68.   /*  - DMA2_Stream0 channel2 configuration                                   */
  69.   /*  - Configure ADC Channel7 pin as analog input                            */
  70.   /*  - Configure ADC1 Channel7                                               */
  71.   ADC1_CH13_DMA_Config();                          //ADC模数转化的初始化
  72.   
  73.   /* Start ADC1 Software Conversion */
  74.   ADC_SoftwareStartConv(ADC1);                          //ADC模数转化的初始化

  75.   printf("\r\n ARMJISHU.COM神舟王STM32F439IGT开发板  AD模数转换实验\n\n\r");
  76. #ifdef PRINT_ON_LCD
  77.   /* Display ADC converted value on LCD */
  78.   Display_Init();
  79. #endif  
  80.   while (1)
  81.   {
  82.     #ifdef PRINT_ON_LCD
  83.     /* Display ADC converted value on LCD */
  84.         Display();
  85.     #endif

  86.     // 取两次采样的平均值
  87.     ADCConvertedValueLocalTemp = ADC1ConvertedValue;
  88.     Delay_ARMJISHU(80000);
  89.     ADCConvertedValueLocal = ADC1ConvertedValue;
  90.     ADCConvertedValueLocal = (ADCConvertedValueLocalTemp + ADCConvertedValueLocal) >> 1;
  91.    
  92.     Precent = (ADCConvertedValueLocal*100/0x1000);        //算出百分比
  93.     Voltage = Precent*33;                                                  // 3.3V的电平,计算等效电平

  94.     printf("\r 当前AD转换结果为:0x%X, 百分比为:%d%%,电压值:%d.%d%dV.  \r",
  95.     ADCConvertedValueLocal, Precent, Voltage/1000, (Voltage%1000)/100, (Voltage%100)/10);

  96.     Delay_ARMJISHU(6000000);
  97.   }      
  98. }

  99. PUTCHAR_PROTOTYPE
  100. {
  101.   /* Place your implementation of fputc here */
  102.   /* e.g. write a character to the USART */
  103.   USART_SendData(USART1, (uint8_t) ch);

  104.   /* Loop until the end of transmission */
  105.   while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
  106.   {}

  107.   return ch;
  108. }


  109. void ADC1_CH13_DMA_Config(void)
  110. {
  111.   ADC_InitTypeDef       ADC_InitStructure;
  112.   ADC_CommonInitTypeDef ADC_CommonInitStructure;
  113.   DMA_InitTypeDef       DMA_InitStructure;
  114.   GPIO_InitTypeDef      GPIO_InitStructure;

  115.   /* Enable ADC1, DMA2 and GPIO clocks ****************************************/
  116.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 | RCC_AHB1Periph_GPIOC, ENABLE);
  117.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

  118.   /* DMA2 Stream0 channel2 configuration **************************************/
  119.   DMA_InitStructure.DMA_Channel = DMA_Channel_0;  
  120.   DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_ADDRESS;
  121.   DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADC1ConvertedValue;
  122.   DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
  123.   DMA_InitStructure.DMA_BufferSize = 1;
  124.   DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  125.   DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;
  126.   DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
  127.   DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  128.   DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
  129.   DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  130.   DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;         
  131.   DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
  132.   DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
  133.   DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
  134.   DMA_Init(DMA2_Stream0, &DMA_InitStructure);
  135.   DMA_Cmd(DMA2_Stream0, ENABLE);

  136.   /* Configure PC.03 (ADC Channel13) as analog input -------------------------*/
  137.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  138.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
  139.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
  140.   GPIO_Init(GPIOC, &GPIO_InitStructure);

  141.   /* ADC Common Init **********************************************************/
  142.   ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
  143.   ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;
  144.   ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
  145.   ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
  146.   ADC_CommonInit(&ADC_CommonInitStructure);

  147.   /* ADC1 Init ****************************************************************/
  148.   ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
  149.   ADC_InitStructure.ADC_ScanConvMode = DISABLE;
  150.   ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
  151.   ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
  152.   ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  153.   ADC_InitStructure.ADC_NbrOfConversion = 1;         //顺序进行规则转换的ADC通道的数目,这个数目的取值范围为1-16//
  154.   ADC_Init(ADC1, &ADC_InitStructure);

  155.   /* ADC1 regular channel13 configuration *************************************/
  156.   ADC_RegularChannelConfig(ADC1, ADC_Channel_13, 1, ADC_SampleTime_3Cycles);

  157. /* Enable DMA request after last transfer (Single-ADC mode) */
  158.   ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE);

  159.   /* Enable ADC1 DMA */
  160.   ADC_DMACmd(ADC1, ENABLE);

  161.   /* Enable ADC1 */
  162.   ADC_Cmd(ADC1, ENABLE);
  163. }

  164. #ifdef PRINT_ON_LCD
  165. /**
  166.   * [url=home.php?mod=space&uid=247401]@brief[/url]  Display ADC converted value on LCD
  167.   * @param  None
  168.   * @retval None
  169.   */
  170. void Display(void)
  171. {
  172.   uint32_t v=0,mv=0;
  173.   uint8_t text[50];

  174.   ADC1ConvertedVoltage = ADC1ConvertedValue *3300/0xFFF;

  175.   v=(ADC1ConvertedVoltage)/1000;
  176.   mv = (ADC1ConvertedVoltage%1000)/10;
  177.   sprintf((char*)text,"   ADC = %d.%d V   ",v,mv);
  178.   LCD_DisplayStringLine(LINE(6),text);
  179. }

  180. void Display_Init(void)
  181. {
  182.   /* Initialize the LCD */
  183.   STM324xG_LCD_Init();

  184.   /* Clear the LCD */
  185.   LCD_Clear(White);

  186.   LCD_DisplayWelcomeStr(LCD_LINE_8);

  187.   /* Set the LCD Text size */
  188.   LCD_SetFont(&Font8x12);

  189.   /* Set the LCD Back Color and Text Color*/
  190.   LCD_SetBackColor(Blue);
  191.   LCD_SetTextColor(White);

  192.   /* Display */
  193.   LCD_DisplayStringLine(LINE(0x13), " ADC conversion w/ DMA transfer example ");

  194.   /* Set the LCD Text size */
  195.   LCD_SetFont(&Font16x24);

  196.   /* Display */
  197.   LCD_DisplayStringLine(LINE(0), "ADC Conversion @2Msps");


  198.   /* Set the LCD Back Color and Text Color*/
  199.   LCD_SetBackColor(White);
  200.   LCD_SetTextColor(Blue);

  201.   /* Display */
  202.   LCD_DisplayStringLine(LINE(2),"  Turn R118(PC.03)    ");
  203.   LCD_DisplayStringLine(LINE(4),"   Potentiometer     ");
  204. }
  205. #endif /* PRINT_ON_LCD */
  1. 移植后:
  2. #include "stm32f4xx.h"
  3. #include "ucos_ii.h"
  4. #include <stdio.h>
  5. #include "Gpio.h"
  6. #include "stm324xg_lcd.h"
  7. #include "fonts.h"


  8. //#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
  9. #define  ADC1_DR_ADDRESS         ((uint32_t)0x4001204C) //ADC1 DR寄存器基地址
  10. ADC_InitTypeDef ADC_InitStructure;        //ADC初始化结构体声明
  11. DMA_InitTypeDef DMA_InitStructure;        //DMA初始化结构体声明
  12. __IO uint16_t ADCConvertedValue;     // ADC为12位模数转换器,只有ADCConvertedValue的低12位有效
  13. __IO uint16_t ADC1ConvertedValue = 0;
  14. __IO uint32_t ADC1ConvertedVoltage = 0;

  15. #define TASKSamp_PRIO     5
  16. #define TASKSamp_STK_SIZE 128


  17. #define TASKUsart_PRIO     6
  18. #define TASKUsart_STK_SIZE 128

  19. #define TASKDisp_PRIO     7
  20. #define TASKDisp_STK_SIZE 128


  21. int fputc(int ch, FILE *f)
  22. {
  23.   /* Place your implementation of fputc here */
  24.   /* e.g. write a character to the USART */
  25.   USART_SendData(USART1, (uint8_t) ch);

  26.   /* Loop until the end of transmission */
  27.   while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
  28.   {}

  29.   return ch;
  30. }

  31. void STM32_Shenzhou_COMInit(USART_InitTypeDef* USART_InitStruct)
  32. {
  33.   GPIO_InitTypeDef GPIO_InitStructure;
  34.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);        /* Enable GPIO clock */
  35.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); /* Enable UART clock */
  36.   GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);         /* Connect PXx to USARTx_Tx*/

  37.   /* Connect PXx to USARTx_Rx*/
  38.   GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);

  39.   /* Configure USART Tx as alternate function  */
  40.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  41.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  42.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;

  43.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  44.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  45.   GPIO_Init(GPIOA, &GPIO_InitStructure);

  46.   /* Configure USART Rx as alternate function  */
  47.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  48.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  49.   GPIO_Init(GPIOA, &GPIO_InitStructure);

  50.   USART_Init(USART1, USART_InitStruct);        /* USART configuration */
  51.   USART_Cmd(USART1, ENABLE); /* Enable USART */
  52. }

  53. void Printf_Init(void)
  54. {
  55.   USART_InitTypeDef USART_InitStructure;   
  56.   USART_InitStructure.USART_BaudRate = 115200;
  57.   USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  58.   USART_InitStructure.USART_StopBits = USART_StopBits_1;
  59.   USART_InitStructure.USART_Parity = USART_Parity_No;
  60.   USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  61.   USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

  62.   STM32_Shenzhou_COMInit(&USART_InitStructure);
  63. }

  64. void ADC1_CH13_DMA_Config(void)
  65. {
  66.   ADC_InitTypeDef       ADC_InitStructure;
  67.   ADC_CommonInitTypeDef ADC_CommonInitStructure;
  68.   DMA_InitTypeDef       DMA_InitStructure;
  69.   GPIO_InitTypeDef      GPIO_InitStructure;

  70.   /* Enable ADC1, DMA2 and GPIO clocks ****************************************/
  71.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 | RCC_AHB1Periph_GPIOC, ENABLE);
  72.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

  73.   /* DMA2 Stream0 channel2 configuration **************************************/
  74.   DMA_InitStructure.DMA_Channel = DMA_Channel_0;  
  75.   DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_ADDRESS;
  76.   DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADC1ConvertedValue;
  77.   DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
  78.   DMA_InitStructure.DMA_BufferSize = 1;
  79.   DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  80.   DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;
  81.   DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
  82.   DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  83.   DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
  84.   DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  85.   DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;         
  86.   DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
  87.   DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
  88.   DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
  89.   DMA_Init(DMA2_Stream0, &DMA_InitStructure);
  90.   DMA_Cmd(DMA2_Stream0, ENABLE);

  91.   /* Configure PC.03 (ADC Channel13) as analog input -------------------------*/
  92.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  93.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
  94.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
  95.   GPIO_Init(GPIOC, &GPIO_InitStructure);

  96.   /* ADC Common Init **********************************************************/
  97.   ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
  98.   ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;
  99.   ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
  100.   ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
  101.   ADC_CommonInit(&ADC_CommonInitStructure);

  102.   /* ADC1 Init ****************************************************************/
  103.   ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
  104.   ADC_InitStructure.ADC_ScanConvMode = DISABLE;
  105.   ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
  106.   ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
  107.   ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  108.   ADC_InitStructure.ADC_NbrOfConversion = 1;         //顺序进行规则转换的ADC通道的数目,这个数目的取值范围为1-16//
  109.   ADC_Init(ADC1, &ADC_InitStructure);

  110.   /* ADC1 regular channel13 configuration *************************************/
  111.   ADC_RegularChannelConfig(ADC1, ADC_Channel_13, 1, ADC_SampleTime_3Cycles);

  112. /* Enable DMA request after last transfer (Single-ADC mode) */
  113.   ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE);

  114.   /* Enable ADC1 DMA */
  115.   ADC_DMACmd(ADC1, ENABLE);

  116.   /* Enable ADC1 */
  117.   ADC_Cmd(ADC1, ENABLE);
  118. }


  119. /**
  120.   * [url=home.php?mod=space&uid=247401]@brief[/url]  Display ADC converted value on LCD
  121.   * @param  None
  122.   * @retval None
  123.   */

  124. void Display_Init(void)
  125. {
  126.   /* Initialize the LCD */
  127.   STM324xG_LCD_Init();

  128.   /* Clear the LCD */
  129.   LCD_Clear(White);

  130.   LCD_DisplayWelcomeStr(LCD_LINE_8);

  131.   /* Set the LCD Text size */
  132.   LCD_SetFont(&Font8x12);

  133.   /* Set the LCD Back Color and Text Color*/
  134.   LCD_SetBackColor(Blue);
  135.   LCD_SetTextColor(White);

  136.   /* Display */
  137.   LCD_DisplayStringLine(LINE(0x13), " ADC conversion w/ DMA transfer example ");

  138.   /* Set the LCD Text size */
  139.   LCD_SetFont(&Font16x24);

  140.   /* Display */
  141.   LCD_DisplayStringLine(LINE(0), "ADC Conversion @2Msps");


  142.   /* Set the LCD Back Color and Text Color*/
  143.   LCD_SetBackColor(White);
  144.   LCD_SetTextColor(Blue);

  145.   /* Display */
  146.   LCD_DisplayStringLine(LINE(2),"  Turn R118(PC.03)    ");
  147.   LCD_DisplayStringLine(LINE(4),"   Potentiometer     ");
  148. }

  149. void Display(void)
  150. {
  151.   uint32_t v=0,mv=0;
  152.   uint8_t text[50];

  153.   ADC1ConvertedVoltage = ADC1ConvertedValue *3300/0xFFF;

  154.   v=(ADC1ConvertedVoltage)/1000;
  155.   mv = (ADC1ConvertedVoltage%1000)/10;
  156.   sprintf((char*)text,"   ADC = %d.%d V   ",v,mv);
  157.   LCD_DisplayStringLine(LINE(6),text);
  158. }


  159. static void taskSamp(void *p_arg);
  160. static void taskUsart(void *p_arg);
  161. static void taskDisp(void *p_arg);


  162. static OS_STK taskSamp_stk[TASKSamp_STK_SIZE];

  163. static OS_STK taskUsart_stk[TASKUsart_STK_SIZE];

  164. static OS_STK taskDisp_stk[TASKDisp_STK_SIZE];
  165. static void systick_init(void)
  166. {
  167.     RCC_ClocksTypeDef rcc_clocks;
  168.     RCC_GetClocksFreq(&rcc_clocks);
  169.     SysTick_Config(rcc_clocks.HCLK_Frequency/OS_TICKS_PER_SEC);
  170. }

  171. int main(void)
  172. {       
  173.    
  174.         OSInit();

  175.     printf("\n\r\n");
  176.     printf("\n\r 论坛后续还会有更多精彩的示例,欢迎访问论坛交流与学习.");
  177.     printf("\n\r 本示例为AD转换示例,串口输出转换结果,模拟信号来自板上的电位器! \n\r");
  178.     printf("\n\r==============================================================================");
  179.     printf("\n\r");
  180.     OSTaskCreate(taskSamp,(void*)0,&taskSamp_stk[TASKSamp_STK_SIZE - 1],TASKSamp_PRIO);
  181.     OSStart();
  182.     return 0;
  183. }

  184. static void taskSamp(void *p_arg)
  185. {  
  186.     systick_init();
  187.        
  188.    OSTaskCreate(taskUsart,(void*)0,&taskUsart_stk[TASKUsart_STK_SIZE - 1],TASKUsart_PRIO);
  189.    OSTaskCreate(taskDisp,(void*)0,&taskDisp_stk[TASKDisp_STK_SIZE - 1],TASKDisp_PRIO);


  190.           while(1)
  191.    {
  192.     ADC1_CH13_DMA_Config();                          //ADC模数转化的初始化  
  193.   /* Start ADC1 Software Conversion */
  194.     ADC_SoftwareStartConv(ADC1);                          //ADC模数转化的软件启动
  195.          
  196.         OSTimeDly(8);

  197.         }
  198.   
  199.    
  200.   }

  201. static void taskUsart(void *p_arg)
  202. {
  203.   u16 ADCConvertedValueLocalTemp, ADCConvertedValueLocal, Percent = 0, Voltage = 0;
  204.         Printf_Init();
  205.   /* ADC1 configuration *******************************************************/
  206.   /*  - Enable peripheral clocks                                              */
  207.   /*  - DMA2_Stream0 channel2 configuration                                   */
  208.   /*  - Configure ADC Channel7 pin as analog input                            */
  209.   /*  - Configure ADC1 Channel7                                               */
  210.         while(1)
  211.    {
  212.     // 取两次采样的平均值
  213.     ADCConvertedValueLocalTemp = ADC1ConvertedValue;
  214.         OSTimeDly(10);
  215.         ADCConvertedValueLocal = ADC1ConvertedValue;
  216.     ADCConvertedValueLocal = (ADCConvertedValueLocalTemp + ADCConvertedValueLocal) >> 1;
  217.    
  218.     Percent = (ADCConvertedValueLocal*100/0x1000);        //算出百分比
  219.     Voltage = Percent*33;                                                  // 3.3V的电平,计算等效电平
  220.         printf("\r\n ARMJISHU.COM神舟王STM32F439IGT开发板  AD模数转换实验\n\n\r");

  221.     printf("\r 当前AD转换结果为:0x%X, 百分比为:%d%%,电压值:%d.%d%dV.  \r",
  222.     ADCConvertedValueLocal, Percent, Voltage/1000, (Voltage%1000)/100, (Voltage%100)/10);
  223.    
  224.         OSTimeDly(5);

  225.         }
  226.   
  227. }


  228. static void taskDisp(void *p_arg)
  229. {
  230.   Display_Init();
  231.   while (1)
  232.   {
  233.      
  234.           Display();
  235.    
  236.            OSTimeDly(2);
  237.    }  
  238.         
  239. }
感觉自己只是作了简单的修改,还请大家多指点指点哇~  
 楼主| wxjlive 发表于 2014-10-23 17:06 | 显示全部楼层
谁能给指点指点啊,多谢啦,在线等。。
mmuuss586 发表于 2014-10-23 19:31 | 显示全部楼层
这么长;
先不要上系统看看;
串口和ADC是否正确
596142041 发表于 2014-10-23 21:42 | 显示全部楼层
感觉你的任务函数不对,代码有点长啊!还不是一般的长
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

1

主题

2

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部