【试用】F207ZE+ADC+DMA+USART+DAC加上DS18B20

[复制链接]
2462|16
 楼主| 胡斯哲 发表于 2016-4-6 22:50 | 显示全部楼层 |阅读模式
本帖最后由 胡斯哲 于 2016-4-22 18:52 编辑

一、F207ZE+ADC+DMA+USART+DAC
就不用嗮板子了直接上程序。用keil5.14
  1. #include "gd32f20x.h"
  2. #include <stdlib.h>
  3. #include <stdio.h>

  4. /* Private define ------------------------------------------------------------*/
  5. #define ADC1_DR_Address ((uint32_t)0x4001244C)
  6. /* Private variables ---------------------------------------------------------*/
  7. float ADC_Value;
  8. int i;
  9. float vu16Temperature;
  10. __IO uint16_t ADCConvertedValue;

  11. ADC_InitPara ADC_InitStructure;
  12. DAC_InitPara DAC_InitStructure;
  13. DMA_InitPara DMA_InitStructure;
  14. /* Private function ----------------------------------------------------------*/
  15. void RCC_Configuration(void);
  16. void GPIO_Configuration(void);
  17. void USART_Configuration(void);
  18. void ADC_Configuration(void);
  19. void Dac1_Init(void);
  20. void Dac1_Set_Vol(u16 vol);

  21. #ifdef __GNUC__
  22.   /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
  23.      set to 'Yes') calls __io_putchar() */
  24.   #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
  25. #else
  26.   #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
  27. #endif
  28. /* __GNUC__ */

  29. /**
  30.   * [url=home.php?mod=space&uid=247401]@brief[/url]  Main program.
  31.   * @param  None
  32.   * @retval None
  33.   */
  34. int main(void)
  35. {
  36.     /* Config System clocks --------------------------------------------------*/
  37.     RCC_Configuration();
  38.     /* Config GPIO ports -----------------------------------------------------*/
  39.     GPIO_Configuration();
  40.     USART_Configuration();
  41.     ADC_Configuration();
  42.           Dac1_Set_Vol(1500);
  43.     //while(ADC_GetBitState(ADC1,ADC_FLAG_EOC) != SET);
  44.     //ADC_Value = ADC_GetConversionValue(ADC1);
  45.     vu16Temperature = ADCConvertedValue*3.3/4096;
  46.     printf("\n\rTemperature %f\n\r",vu16Temperature);
  47.     while (1);
  48. }

  49. /**
  50.   * [url=home.php?mod=space&uid=247401]@brief[/url]  Configure system clocks.
  51.   * @param  None
  52.   * @retval None
  53.   */
  54. void RCC_Configuration(void)
  55. {
  56.     /* ADCCLK = PCLK2/6 */
  57.     RCC_ADCCLKConfig(RCC_ADCCLK_APB2_DIV6);

  58.     /* Enable DMA1 and GPIOC clock */
  59.     RCC_APB2PeriphClock_Enable( RCC_APB2PERIPH_GPIOA|RCC_APB2PERIPH_AF , ENABLE);
  60.     /* Enable USART1 APB clock */
  61.     RCC_APB2PeriphClock_Enable( RCC_APB2PERIPH_USART1 , ENABLE );
  62.     /* Enable ADC1 clock */
  63.     RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_ADC1, ENABLE);
  64.           RCC_AHBPeriphClock_Enable(RCC_AHBPERIPH_DMA1, ENABLE);
  65. }

  66. /**
  67.   * [url=home.php?mod=space&uid=247401]@brief[/url]  Configure GPIO ports.
  68.   * @param  None
  69.   * @retval None
  70.   */
  71. void GPIO_Configuration(void)
  72. {
  73.     GPIO_InitPara GPIO_InitStructure;

  74.     GPIO_InitStructure.GPIO_Pin = GPIO_PIN_3;
  75.     GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AIN;
  76.     GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ;
  77.     GPIO_Init(GPIOC, &GPIO_InitStructure);
  78. }

  79. /**
  80.   * [url=home.php?mod=space&uid=247401]@brief[/url]  Configure ADC Configuration.
  81.   * @param  None
  82.   * @retval None
  83.   */
  84. void ADC_Configuration(void)
  85. {
  86.           DMA_DeInit(DMA1_CHANNEL1);
  87.     DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
  88.     DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&ADCConvertedValue;
  89.     DMA_InitStructure.DMA_DIR = DMA_DIR_PERIPHERALSRC;
  90.     DMA_InitStructure.DMA_BufferSize = 1;
  91.     DMA_InitStructure.DMA_PeripheralInc = DMA_PERIPHERALINC_DISABLE;
  92.     DMA_InitStructure.DMA_MemoryInc = DMA_MEMORYINC_DISABLE;
  93.     DMA_InitStructure.DMA_PeripheralDataSize = DMA_PERIPHERALDATASIZE_HALFWORD;
  94.     DMA_InitStructure.DMA_MemoryDataSize = DMA_MEMORYDATASIZE_HALFWORD;
  95.     DMA_InitStructure.DMA_Mode = DMA_MODE_CIRCULAR;
  96.     DMA_InitStructure.DMA_Priority = DMA_PRIORITY_HIGH;
  97.     DMA_InitStructure.DMA_MTOM = DMA_MEMTOMEM_DISABLE;
  98.     DMA_Init(DMA1_CHANNEL1, &DMA_InitStructure);
  99.     /* Enable DMA1 channel1 */
  100.     DMA_Enable(DMA1_CHANNEL1, ENABLE);
  101.     /* Config ADC1 --------------------------------------------------------------*/
  102.     ADC_InitStructure.ADC_Mode_Scan = DISABLE;
  103.     ADC_InitStructure.ADC_Mode_Continuous = DISABLE;
  104.     ADC_InitStructure.ADC_Trig_External = ADC_EXTERNAL_TRIGGER_MODE_NONE;
  105.     ADC_InitStructure.ADC_Data_Align = ADC_DATAALIGN_RIGHT;
  106.     ADC_InitStructure.ADC_Mode = ADC_MODE_INDEPENDENT;
  107.     ADC_InitStructure.ADC_Channel_Number = 1;
  108.     ADC_Init(ADC1,&ADC_InitStructure);

  109.     /* ADC1 regular channels configuration */
  110.     ADC_RegularChannel_Config(ADC1,ADC_CHANNEL_13, 1, ADC_SAMPLETIME_239POINT5);

  111.     ADC_ExternalTrigConv_Enable(ADC1,ENABLE);
  112.     ADC_TempSensorVrefint_Enable(ENABLE);
  113.     /* Enable ADC1 DMA */
  114.     ADC_DMA_Enable(ADC1, ENABLE);
  115.     /* Enable ADC1 */
  116.     ADC_Enable(ADC1,ENABLE);
  117.     ADC_Calibration(ADC1);

  118.     /* Start ADC1 Software Conversion */
  119.     ADC_SoftwareStartConv_Enable(ADC1,ENABLE);
  120. }


  121. /**
  122.   * @brief  Configure USART parameter.
  123.   * @param  None
  124.   * @retval None
  125.   */
  126. void USART_Configuration(void)
  127. {
  128.     USART_InitPara USART_InitStructure;
  129.           GPIO_InitPara  GPIO_InitStructure;
  130.     RCC_APB2PeriphClock_Enable( RCC_APB2PERIPH_GPIOB, ENABLE );
  131.     /* Enable USART1 APB clock */
  132.     RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_USART1, ENABLE );
  133.     RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_AF, ENABLE);
  134.     GPIO_InitStructure.GPIO_Pin     = GPIO_PIN_6 ;
  135.     GPIO_InitStructure.GPIO_Mode    = GPIO_MODE_AF_PP;
  136.     GPIO_InitStructure.GPIO_Speed   = GPIO_SPEED_50MHZ;
  137.     GPIO_Init( GPIOB , &GPIO_InitStructure);
  138.     GPIO_InitStructure.GPIO_Pin     = GPIO_PIN_7;
  139.     GPIO_InitStructure.GPIO_Mode    = GPIO_MODE_IN_FLOATING;;
  140.     GPIO_Init( GPIOB , &GPIO_InitStructure);

  141.     GPIO_PinRemapConfig(GPIO_REMAP_USART1, ENABLE);
  142.     USART_DeInit( USART1 );
  143.     USART_InitStructure.USART_BRR = 115200;
  144.     USART_InitStructure.USART_WL = USART_WL_8B;
  145.     USART_InitStructure.USART_STBits = USART_STBITS_1;
  146.     USART_InitStructure.USART_Parity = USART_PARITY_RESET;
  147.     USART_InitStructure.USART_HardwareFlowControl = USART_HARDWAREFLOWCONTROL_NONE;
  148.     USART_InitStructure.USART_RxorTx = USART_RXORTX_RX | USART_RXORTX_TX;
  149.     USART_Init(USART1, &USART_InitStructure);
  150.     /* USART enable */
  151.     USART_Enable(USART1, ENABLE);
  152. }

  153. void Dac1_Init(void)
  154. {  
  155.   GPIO_InitPara  GPIO_InitStructure;
  156.         DAC_InitPara DAC_InitType;
  157.         
  158.   RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_GPIOA, ENABLE);//??GPIOA??
  159.   RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_DAC, ENABLE);//??DAC??
  160.            
  161.   GPIO_InitStructure.GPIO_Pin = GPIO_PIN_5;
  162.   GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AIN;//????
  163.   //GPIO_InitStructure.GPIO_PuPd = GPIO_MODE_OUT_PP;//??
  164.   GPIO_Init(GPIOA, &GPIO_InitStructure);//???

  165.         DAC_InitStructure.DAC_Trigger=DAC_TRIGGER_NONE;        //??????? TEN1=0
  166.         DAC_InitType.DAC_WaveType=DAC_WAVEGENE_NONE;//???????
  167.         DAC_InitType. DAC_LFSRNoise_AmplitudeTriangle=DAC_LFSR_BIT0 ;//???????
  168.         DAC_InitType.DAC_OutputBuffer=DAC_OUTPUTBUFFER_DISABLE  ;        //DAC1?????? BOFF1=1
  169.   DAC_Init(DAC_CHANNEL_2,&DAC_InitType);         //???DAC??1

  170.         DAC_DMA_Enable(DAC_CHANNEL_2, ENABLE);  //??DAC??1
  171.   
  172.   DAC_SetChannel1Data(DAC_ALIGN_12B_R, 0);  //12??????????DAC?
  173. }
  174. //????1????
  175. //vol:0~3300,??0~3.3V
  176. void Dac1_Set_Vol(u16 vol)
  177. {
  178.         double temp=vol;
  179.         temp/=1000;
  180.         temp=temp*4096/3.3;
  181.         DAC_SetChannel1Data(DAC_ALIGN_12B_R,temp);//12??????????DAC?
  182. }


  183. /**
  184.   * @brief  Retarget the C library printf function to the USART.
  185.   * @param  None
  186.   * @retval None
  187.   */
  188. PUTCHAR_PROTOTYPE
  189. {
  190.     /* Loop until transmit data register is empty */
  191.     while (USART_GetBitState( USART1 , USART_FLAG_TBE) == RESET)
  192.     {
  193.     }
  194.     /* Place your implementation of fputc here */
  195.     USART_DataSend( USART1 , (uint8_t) ch );
  196.     return ch;
  197. }
截取串口图片

对于这块板子总体感觉调的也很顺利,跟stm32差不多。特别是板子上有现成的串口,还是很方便。之前用stm32f030discovery没现成串口,好多功能都没法用。
二、将STM32F030的DS18B20的程序直接改为GD上
前段时间忙工作的事,没弄板子,今天调了下板子。虽然当中有些奇怪的问题出现,但基本都属于操作不熟练。这次修改基本没有什么改动,只是头文件和加上了串口,精确延时还是用的stm32的systick,可以不用动。
在网上看到说板子丝印标的不对,我感觉没问题,对照下图可以测测
管脚.PNG 需要改动的地方
1)、GD用的是GPIOA_PIN1(这个stm32用GPIO_Pin),
2)、RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);-------》RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_GPIOA, ENABLE);
3)、GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;和GPIO_InitStructure.GPIO_OType=GPIO_OType_OD;合并为一句GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUT_OD;
4)、GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_1改为GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ;
其他没变化
硬件图
ww.jpg
串口截图
cuankou.PNG
程序
gd3218b20.rar (360.71 KB, 下载次数: 36)
确实感觉stm32可以被GD32取代哦

  
弈涯 发表于 2016-4-7 10:03 | 显示全部楼层
太棒了
 楼主| 胡斯哲 发表于 2016-4-7 14:21 来自手机 | 显示全部楼层
弈涯 发表于 2016-4-7 10:03
太棒了

yaoxihua 发表于 2016-4-10 21:38 | 显示全部楼层
能搞个定时器中断的例程吗
 楼主| 胡斯哲 发表于 2016-4-11 19:59 | 显示全部楼层
yaoxihua 发表于 2016-4-10 21:38
能搞个定时器中断的例程吗

最近有点事  没弄了  有时间再分享
chuntian2016 发表于 2016-4-12 18:06 | 显示全部楼层
这个程序非常不错的,AD采集数据经过处理后再以DA的方式输出模拟信号。
zhangbo1985 发表于 2016-4-16 11:17 | 显示全部楼层
这个程序很不错,再多综合下的,就可以做一个复杂点的项目的额
smilingangel 发表于 2016-4-16 12:22 | 显示全部楼层
看这个程序的操作跟STM32没多大区别的。
 楼主| 胡斯哲 发表于 2016-4-16 16:46 来自手机 | 显示全部楼层
smilingangel 发表于 2016-4-16 12:22
看这个程序的操作跟STM32没多大区别的。

确实没多大差别  可能就结构体名字不同
 楼主| 胡斯哲 发表于 2016-4-16 16:47 来自手机 | 显示全部楼层
zhangbo1985 发表于 2016-4-16 11:17
这个程序很不错,再多综合下的,就可以做一个复杂点的项目的额

也想  可是最近没时间
angerbird 发表于 2016-4-16 21:03 | 显示全部楼层
该程序的条理比较清楚,跟STM32的差不多的。
comeon201208 发表于 2016-4-17 12:36 | 显示全部楼层
这个程序还是比较基础性的,先是AD采集的然后进行数据处理后再DA输出的。
 楼主| 胡斯哲 发表于 2016-4-17 13:14 来自手机 | 显示全部楼层
comeon201208 发表于 2016-4-17 12:36
这个程序还是比较基础性的,先是AD采集的然后进行数据处理后再DA输出的。

先da后ad的
comeon201208 发表于 2016-4-17 13:26 | 显示全部楼层

哦,这个程序的主要看main函数部分的,不太容易看出这个先后的,我这就思维定式的了
 楼主| 胡斯哲 发表于 2016-6-28 15:39 | 显示全部楼层
lisingch 发表于 2016-6-29 17:56 | 显示全部楼层
不错,研究学习一下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:读书喝茶,不争朝夕

141

主题

1431

帖子

6

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