概述
本章主要配置,雙ADC輪詢模式掃描多個通道,通過串口進行打印。 查閱手冊可以得知,PA9、PA10為串口0的輸出和輸入口。 查閱手冊可以得知,PA9、PA10為串口0的輸出和輸入口。需要GD樣片的可以加Q_qun申請:6_15061293 。
樣品申請
https://www.wjx.top/vm/wFGhGPF.aspx#
硬件準備
這里準備了1塊開發(fā)板進行驗證,分別是GD32303C_START開發(fā)板。
keil配置
microlib 進行了高度優(yōu)化以使代碼變得很小。 它的功能比缺省 C 庫少,并且根本不具備某些 ISO C 特性。 某些庫函數(shù)的運行速度也比較慢,如果要使用printf(),必須開啟。
使能串口
/* 使能GPI0A,用PA9、PA10為串口 */
rcu_periph_clock_enable(RCU_GPIOA);
/*使能串口0的時鐘 */
rcu_periph_clock_enable(RCU_USART0);
/*配置USARTx_Tx(PA9)為復用推挽輸出*/
gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);
/*配置USARTx_RxPA9)為浮空輸入 */
gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_10);
/* USART 配置 */
usart_deinit(USART0);//重置串口0
usart_baudrate_set(USART0, 115200U);//設置串口0的波特率為115200
usart_word_length_set(USART0, USART_WL_8BIT); // 幀數(shù)據(jù)字長
usart_stop_bit_set(USART0, USART_STB_1BIT); // 停止位1位
usart_parity_config(USART0, USART_PM_NONE); // 無奇偶校驗位
usart_receive_config(USART0, USART_RECEIVE_ENABLE);//使能接收器
usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);//使能發(fā)送器
usart_enable(USART0);//使能USART
串口重定向
/* retarget the C library printf function to the USART */
int fputc(int ch, FILE *f)
{
usart_data_transmit(USART0, (uint8_t)ch);
while(RESET == usart_flag_get(USART0, USART_FLAG_TBE));
return ch;
}
串口重定向后就可以使用printf進行打印。
ADC通道設置
ADC0初始化
///*************時鐘配置******************/
/*使能GPIOA時鐘 */
rcu_periph_clock_enable(RCU_GPIOA);
/*使能ADC時鐘 */
rcu_periph_clock_enable(RCU_ADC0);
/* 配置ADC速率 */
rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV8);
ADC0配置
/*------------------ADC GPIO配置------------------*/
// 必須為模擬輸入
gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_MAX, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2);
/*------------------ADC工作模式配置------------------*/
// 設置adc工作在獨立模式
adc_mode_config(ADC_MODE_FREE);
// 多通道用掃描模式
// adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE);
// 單通道用連續(xù)轉(zhuǎn)換模式
// adc_special_function_config(ADC0, ADC_CONTINUOUS_MODE, ENABLE);
// 結(jié)果轉(zhuǎn)換右對齊
adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);
// 轉(zhuǎn)換通道1個
adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 3);
/* ADC regular channel config */
adc_regular_channel_config(ADC0, 0, ADC_CHANNEL_0, ADC_SAMPLETIME_55POINT5);
adc_regular_channel_config(ADC0, 1, ADC_CHANNEL_1, ADC_SAMPLETIME_55POINT5);
adc_regular_channel_config(ADC0, 2, ADC_CHANNEL_2, ADC_SAMPLETIME_55POINT5);
// 不用外部觸發(fā)轉(zhuǎn)換,軟件開啟即可
adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE);
adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, ENABLE);
// 使能ADC
adc_enable(ADC0);
delay_1ms(1); // 等待1ms
// 使能ADC校準
adc_calibration_enable(ADC0);
ADC1初始化
/*************時鐘配置******************/
/*使能GPIOA時鐘 */
rcu_periph_clock_enable(RCU_GPIOB);
/*使能ADC時鐘 */
rcu_periph_clock_enable(RCU_ADC1);
/* 配置ADC速率 */
rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV8);
ADC1配置
/*------------------ADC GPIO配置------------------*/
// 必須為模擬輸入
gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_MAX, GPIO_PIN_7);
gpio_init(GPIOB, GPIO_MODE_AIN, GPIO_OSPEED_MAX, GPIO_PIN_0 | GPIO_PIN_1);
/*------------------ADC工作模式配置------------------*/
// 設置adc工作在獨立模式
adc_mode_config(ADC_MODE_FREE);
// 多通道用掃描模式
// adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE);
// 單通道用連續(xù)轉(zhuǎn)換模式
// adc_special_function_config(ADC0, ADC_CONTINUOUS_MODE, ENABLE);
// 結(jié)果轉(zhuǎn)換右對齊
adc_data_alignment_config(ADC1, ADC_DATAALIGN_RIGHT);
// 轉(zhuǎn)換通道1個
adc_channel_length_config(ADC1, ADC_REGULAR_CHANNEL, 3);
/* ADC regular channel config */
adc_regular_channel_config(ADC1, 0, ADC_CHANNEL_7, ADC_SAMPLETIME_55POINT5);
adc_regular_channel_config(ADC1, 1, ADC_CHANNEL_8, ADC_SAMPLETIME_55POINT5);
adc_regular_channel_config(ADC1, 2, ADC_CHANNEL_9, ADC_SAMPLETIME_55POINT5);
// 不用外部觸發(fā)轉(zhuǎn)換,軟件開啟即可
adc_external_trigger_source_config(ADC1, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE);
adc_external_trigger_config(ADC1, ADC_REGULAR_CHANNEL, ENABLE);
// 使能ADC
adc_enable(ADC1);
delay_1ms(1); // 等待1ms
// 使能ADC校準
adc_calibration_enable(ADC1);
ADC數(shù)據(jù)采集
uint16_t get_adc(uint32_t adc_periph , uint8_t adc_channel)
{
/* 配置規(guī)則通道采集*/
adc_regular_channel_config(adc_periph, 0, adc_channel, ADC_SAMPLETIME_55POINT5);
// 由于沒有采用外部觸發(fā),所以使用軟件觸發(fā)ADC轉(zhuǎn)換
adc_software_trigger_enable(adc_periph, ADC_REGULAR_CHANNEL);
while(!adc_flag_get(adc_periph, ADC_FLAG_EOC)); // 等待采樣完成
adc_flag_clear(adc_periph, ADC_FLAG_EOC); // 清除結(jié)束標志
return adc_regular_data_read(adc_periph); // 讀取ADC數(shù)據(jù)
}
數(shù)據(jù)采集
while (1){
uint16_t adc0Value0 = 0;
uint16_t adc0Value1 = 0;
uint16_t adc0Value2 = 0;
adc0Value0=get_adc(ADC0 ,ADC_CHANNEL_0);
adc0Value1=get_adc(ADC0 ,ADC_CHANNEL_1);
adc0Value2=get_adc(ADC0 ,ADC_CHANNEL_2);
printf('\nadc0_IN0(PA0)=%4.0d,電壓=%1.4f',adc0Value0,adc0Value0*3.3f/4095);
printf('\nadc0_IN1(PA1)=%4.0d,電壓=%1.4f',adc0Value1,adc0Value1*3.3f/4095);
printf('\nadc0_IN2(PA2)=%4.0d,電壓=%1.4f',adc0Value2,adc0Value2*3.3f/4095);
uint16_t adc1Value0 = 0;
uint16_t adc1Value1 = 0;
uint16_t adc1Value2 = 0;
adc1Value0=get_adc(ADC1 ,ADC_CHANNEL_7);
adc1Value1=get_adc(ADC1 ,ADC_CHANNEL_8);
adc1Value2=get_adc(ADC1 ,ADC_CHANNEL_9);
printf('\nadc1_IN7(PA7)=%4.0d,電壓=%1.4f',adc1Value0,adc1Value0*3.3f/4095);
printf('\nadc1_IN8(PB0)=%4.0d,電壓=%1.4f',adc1Value1,adc1Value1*3.3f/4095);
printf('\nadc1_IN9(PB1)=%4.0d,電壓=%1.4f',adc1Value2,adc1Value2*3.3f/4095);
delay_1ms(1000);
}
測試結(jié)果
輸入固定電壓進行測試。
測試結(jié)果如下。
上一篇:GD32F103C8單片機的PWM輸出試驗
下一篇:GD32F103C8T6 Uart3無法發(fā)送數(shù)據(jù)
推薦閱讀最新更新時間:2025-08-05 06:36
設計資源 培訓 開發(fā)板 精華推薦
- 2019電賽C題-電路負載及故障檢測裝置-設計報告(國一,東南大學)
- 使用 Semtech 的 EZ1582 的參考設計
- SCV431B 低壓精密可調(diào)并聯(lián)穩(wěn)壓器的典型應用
- NCP1094GEVB,PoE-PD 接口控制器評估板
- VOICE-RECORD-RD,基于 C8051F411 8051 MCU 的錄音機參考設計套件
- ADR291GRZ-REEL7 2.5V便攜式設備穩(wěn)壓器典型應用電路
- 使用 Analog Devices 的 AD8350AR15 的參考設計
- REF194 精密微功率、低壓差電壓基準的典型應用
- 使用 Analog Devices 的 LTC3130IUDC-1 的參考設計
- 使用 STMicroelectronics 的 STUSB4500 的參考設計
- 人民幣匯率上漲,對元器件進出口有何影響
- 被日本限制原材料:三星、SK海力士庫存告急
- 異構(gòu)融合電子芯片—天機芯有何玄機
- 向復合半導體技術(shù)進軍,歐洲GaN發(fā)展戰(zhàn)略
- 官方STM32的NUCLEO開發(fā)板使用
- 日本電產(chǎn)(Nidec)發(fā)布車載用新型雷達
- 世界地球日:機器人助力綠色發(fā)展
- 獵戶星空王兵:可靠又便宜?什么樣的服務機器人“真有用”
- iTutorGroup首席數(shù)據(jù)官沈沛鴻:AI和大數(shù)據(jù)之于教育 關(guān)鍵詞在“個性化”
- 企業(yè)的人工智能狀態(tài):10個統(tǒng)計數(shù)據(jù)