【东软载波ESF0654 PDS开发板活动】+串口显示ADC值
接着上次的串口通讯程序,把ADC采集加上。由串口显示出来。
1,ADC是PB0 ADC0 14通道:
main.h中加入:
- #include "md_adc.h"
- #include "md_uart.h"
- /* ADC IO pin definition */
- #define GPIO_CH_PORT GPIOB
- #define ADC_CH14_PIN MD_GPIO_PIN_0
- #define UART2_TX_PORT GPIOC
- #define UART2_TX_PIN MD_GPIO_PIN_12
- #define UART2_RX_PORT GPIOD
- #define UART2_RX_PIN MD_GPIO_PIN_2
main.c中加入:
- #include <string.h>
- #include "main.h"
- #include "md_gpio.h"
- md_uart_init_t init;
- uint8_t tx_buf[64];
- uint8_t rx_buf[64];
- /** @addtogroup Projects_Examples_MD
- * @{
- */
- /** @addtogroup Examples_ADC
- * @{
- */
- /**
- * [url=home.php?mod=space&uid=247401]@brief[/url] Initializate buf of adc normal value.
- */
- uint32_t nm_value;
- /**
- * @brief adc_handle_t structure.
- */
- adc_init_t h_adc;
- /**
- * @brief Initializate pin of adc module.
- * @retval None
- */
- void adc_pin_init(void)
- {
- md_gpio_init_t x;
- /* Initialize sck pin */
- x.mode = GPIO_MODE_INPUT;
- x.pupd = GPIO_PUSH_UP;
- x.odrv = GPIO_OUT_DRIVE_NORMAL;
- x.flt = GPIO_FILTER_DISABLE;
- x.type = GPIO_TYPE_CMOS;
- x.func = GPIO_FUNC_0;
- md_gpio_init(GPIO_CH_PORT, ADC_CH14_PIN, &x);
- return;
- }
- void uart_pin_init(void)
- {
- md_gpio_init_t x;
- /* Initialize tx pin */
- x.mode = GPIO_MODE_OUTPUT;
- x.odos = GPIO_PUSH_PULL;
- x.pupd = GPIO_PUSH_UP;
- x.odrv = GPIO_OUT_DRIVE_NORMAL;
- x.flt = GPIO_FILTER_DISABLE;
- x.type = GPIO_TYPE_TTL;
- x.func = GPIO_FUNC_5;
- md_gpio_init(UART2_TX_PORT, UART2_TX_PIN, &x);
- /* Initialize rx pin */
- x.mode = GPIO_MODE_INPUT;
- x.odos = GPIO_PUSH_PULL;
- x.pupd = GPIO_PUSH_UP;
- x.odrv = GPIO_OUT_DRIVE_NORMAL;
- x.flt = GPIO_FILTER_DISABLE;
- x.type = GPIO_TYPE_TTL;
- x.func = GPIO_FUNC_5;
- md_gpio_init(UART2_RX_PORT, UART2_RX_PIN, &x);
- return;
- }
- /**
- * @brief Test main function
- * @retval Status.
- */
- int main()
- {
- /* Initialize 1ms tick */
- md_init_1ms_tick();
- /* clear adc_handle_t structure */
- memset(&h_adc, 0x0, sizeof(h_adc));
-
- /* Initialize adc pin */
- adc_pin_init();
- /* Initialize ADC0 */
- md_adc_struct_init(&h_adc);
- md_adc_init(ADC0, &h_adc);
- /* Initialize normal convert channel */
- md_adc_set_normal_1st_conv_ns1(ADC0, ADC_NC_RANK_14);
- md_adc_set_smpt1_cht(ADC0, ADC_SAMPLETIME_4);
-
- /* clear md_uart_init_t structure */
- memset(&init, 0x0, sizeof(md_uart_init_t));
- /* Initialize pin */
- uart_pin_init();
- /* Initialize tx_buf */
- memset(tx_buf, 0x55, 32);
- /* Initialize UART */
- init.baud = 115200;
- init.word_length = MD_UART_WORD_LENGTH_8B;
- init.stop_bits = MD_UART_STOP_BITS_1;
- init.parity = MD_UART_PARITY_NONE;
- init.fctl = MD_UART_FLOW_CTL_DISABLE;
- md_uart_init(UART2, &init);
- /* Send a message */
- md_uart_send_data8(UART2, tx_buf[0]);
- /* Receive a message */
- rx_buf[0] = (uint8_t)md_uart_recv_data8(UART2);
-
- while (1) {
- uint8_t i;
- /* Enable ADC0 and start normal convert */
- md_adc_converter_enable_adcen(ADC0);
- md_adc_set_normal_channel_conv_start_ichtrg(ADC0);
-
- /* Wait convert finish */
- while (md_adc_get_stat_nche(ADC0) == 0);
-
- /* Read normal convert result */
- nm_value = md_adc_get_normal_channel_val(ADC0);
- tx_buf[0] =nm_value>>24;
- tx_buf[1] =nm_value>>16;
- tx_buf[2] =nm_value>>8;
- tx_buf[3] =nm_value;
- tx_buf[4] =0x0d;
- tx_buf[5] =0x0a;
- for(i=0;i<6;i++)
- {
- md_uart_send_data8(UART2, tx_buf[i]);
- md_delay_1ms(1);
- }
- md_delay_1ms(1000);
- }
- }
编译运行:
连接串口3 设置波特率115200 N 8 1 打开串口,扭动ADC按钮 观察数据变化:
|