搜索

【东软载波ESF0654 PDS开发板活动】+串口显示ADC值

[复制链接]
1275|1
 楼主 | 2019-12-18 21:13 | 显示全部楼层 |阅读模式
【东软载波ESF0654 PDS开发板活动】+串口显示ADC值
接着上次的串口通讯程序,把ADC采集加上。由串口显示出来。
1,ADC是PB0    ADC0 14通道:
main.h中加入:
  1. #include "md_adc.h"
  2. #include "md_uart.h"
  3. /* ADC IO pin definition */
  4. #define GPIO_CH_PORT          GPIOB
  5. #define ADC_CH14_PIN          MD_GPIO_PIN_0

  6. #define UART2_TX_PORT        GPIOC
  7. #define UART2_TX_PIN        MD_GPIO_PIN_12
  8. #define UART2_RX_PORT        GPIOD
  9. #define UART2_RX_PIN        MD_GPIO_PIN_2
复制代码
main.c中加入:
  1. #include <string.h>
  2. #include "main.h"
  3. #include "md_gpio.h"
  4. md_uart_init_t init;
  5. uint8_t tx_buf[64];
  6. uint8_t rx_buf[64];
  7. /** @addtogroup Projects_Examples_MD
  8.   * @{
  9.   */

  10. /** @addtogroup Examples_ADC
  11.   * @{
  12.   */

  13. /**
  14.   * [url=home.php?mod=space&uid=247401]@brief[/url]  Initializate buf of adc normal value.
  15.   */
  16. uint32_t nm_value;
  17. /**
  18.   * @brief  adc_handle_t structure.
  19.   */
  20. adc_init_t h_adc;

  21. /**
  22.   * @brief  Initializate pin of adc module.
  23.   * @retval None
  24.   */
  25. void adc_pin_init(void)
  26. {
  27.         md_gpio_init_t x;

  28.         /* Initialize sck pin */
  29.         x.mode = GPIO_MODE_INPUT;
  30.         x.pupd = GPIO_PUSH_UP;
  31.         x.odrv = GPIO_OUT_DRIVE_NORMAL;
  32.         x.flt  = GPIO_FILTER_DISABLE;
  33.         x.type = GPIO_TYPE_CMOS;
  34.         x.func = GPIO_FUNC_0;
  35.         md_gpio_init(GPIO_CH_PORT, ADC_CH14_PIN, &x);

  36.         return;
  37. }
  38. void uart_pin_init(void)
  39. {
  40.         md_gpio_init_t x;

  41.         /* Initialize tx pin */
  42.         x.mode = GPIO_MODE_OUTPUT;
  43.         x.odos = GPIO_PUSH_PULL;
  44.         x.pupd = GPIO_PUSH_UP;
  45.         x.odrv = GPIO_OUT_DRIVE_NORMAL;
  46.         x.flt  = GPIO_FILTER_DISABLE;
  47.         x.type = GPIO_TYPE_TTL;
  48.         x.func = GPIO_FUNC_5;
  49.         md_gpio_init(UART2_TX_PORT, UART2_TX_PIN, &x);

  50.         /* Initialize rx pin */
  51.         x.mode = GPIO_MODE_INPUT;
  52.         x.odos = GPIO_PUSH_PULL;
  53.         x.pupd = GPIO_PUSH_UP;
  54.         x.odrv = GPIO_OUT_DRIVE_NORMAL;
  55.         x.flt  = GPIO_FILTER_DISABLE;
  56.         x.type = GPIO_TYPE_TTL;
  57.         x.func = GPIO_FUNC_5;
  58.         md_gpio_init(UART2_RX_PORT, UART2_RX_PIN, &x);

  59.         return;
  60. }

  61. /**
  62.   * @brief  Test main function
  63.   * @retval Status.
  64.   */
  65. int main()
  66. {
  67.         /* Initialize 1ms tick */
  68.         md_init_1ms_tick();

  69.         /* clear adc_handle_t structure */
  70.         memset(&h_adc, 0x0, sizeof(h_adc));
  71.        
  72.         /* Initialize adc pin */
  73.         adc_pin_init();

  74.         /* Initialize ADC0 */
  75.         md_adc_struct_init(&h_adc);
  76.         md_adc_init(ADC0, &h_adc);

  77.         /* Initialize normal convert channel */
  78.         md_adc_set_normal_1st_conv_ns1(ADC0, ADC_NC_RANK_14);
  79.         md_adc_set_smpt1_cht(ADC0, ADC_SAMPLETIME_4);
  80.        
  81.         /* clear md_uart_init_t structure */
  82.         memset(&init, 0x0, sizeof(md_uart_init_t));
  83.         /* Initialize pin */
  84.         uart_pin_init();
  85.         /* Initialize tx_buf */
  86.         memset(tx_buf, 0x55, 32);

  87.         /* Initialize UART */
  88.         init.baud        = 115200;
  89.         init.word_length = MD_UART_WORD_LENGTH_8B;
  90.         init.stop_bits   = MD_UART_STOP_BITS_1;
  91.         init.parity      = MD_UART_PARITY_NONE;
  92.         init.fctl        = MD_UART_FLOW_CTL_DISABLE;
  93.         md_uart_init(UART2, &init);

  94.         /* Send a message */
  95.         md_uart_send_data8(UART2, tx_buf[0]);
  96.         /* Receive a message */
  97.         rx_buf[0] = (uint8_t)md_uart_recv_data8(UART2);

  98.        
  99.         while (1) {       
  100.                   uint8_t i;
  101.       /* Enable ADC0 and start normal convert */
  102.             md_adc_converter_enable_adcen(ADC0);
  103.             md_adc_set_normal_channel_conv_start_ichtrg(ADC0);
  104.        
  105.             /* Wait convert finish */
  106.             while (md_adc_get_stat_nche(ADC0) == 0);
  107.        
  108.             /* Read normal convert result */
  109.             nm_value = md_adc_get_normal_channel_val(ADC0);               
  110.                   tx_buf[0] =nm_value>>24;
  111.                   tx_buf[1] =nm_value>>16;
  112.                   tx_buf[2] =nm_value>>8;
  113.                   tx_buf[3] =nm_value;
  114.                   tx_buf[4] =0x0d;
  115.                   tx_buf[5] =0x0a;
  116.                   for(i=0;i<6;i++)
  117.                   {       
  118.                                 md_uart_send_data8(UART2, tx_buf[i]);
  119.                                 md_delay_1ms(1);
  120.                   }
  121.                         md_delay_1ms(1000);
  122.         }
  123. }
复制代码
编译运行:
捕获3.PNG
连接串口3 设置波特率115200 N 8 1 打开串口,扭动ADC按钮 观察数据变化:

捕获4.PNG

使用特权

评论回复

评论

朱倪 2020-1-16 17:42 回复TA
赞 我们需要你这样的人才,撰写技术心得体会有报酬 请加我微信 kuaibao52 备注来自21ic 
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

热门推荐上一条 /5 下一条

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