printf %-4.3s %-.*s 参数解释

/** * @file ADC/ADC_Temperature/main.h * @brief Header for main.c module * @author ChipSea MCU Group * @version V1.0.0 * @date * @copyright CHIPSEA TECHNOLOGIES (SHENZHEN) CORP. * @note * <h2><center>© COPYRIGHT 2022 ChipSea</center></h2> * * * @verbatim ----------------------- How to used this project--------------------------- * @par Example Description This example shows how to configure ADC for temperature detect. User should combine manual to learn how to calculate actual voltage. - Test steps a. Rebuild the project and load the image into target memory. b. Connect harware to the target board. c. Run the example, SDADC start sample every 1000ms. * @endverbatim * */ /***************************************************************************** * @includes *****************************************************************************/ #include "main.h" /***************************************************************************** * @definitions *****************************************************************************/ #define T0K_FLASH_BASE 0x1FFFFC34 #define DATAT0_HIGH_FLASH_BASE 0x1FFFFC3C #define DATAT0_LOW_FLASH_BASE 0x1FFFFC38 /***************************************************************************** * @variables *****************************************************************************/ extern uint32_t SystemCoreClock; static volatile uint32_t timing_delay; volatile uint32_t data_symbol = 0; /***************************************************************************** * @functions *****************************************************************************/ void delay(volatile uint32_t value); uint32_t adc_data_convert(uint32_t data); /**@brief Main program. * * @param[in] None. * * @return None. */ int main(void) { uint32_t data_T0 = 0; uint32_t T0_K = 0; uint32_t adc_data = 0; double adc_temp = 0; adc_config_t adc_config; pga_config_t pga_config; vref_config_t vref_config; /* Init USART1 */ cs_eval_com_init(); printf("ADC temperature example!\r\n"); /* Interrupt every 1ms */ SysTick_Config(SystemCoreClock / 1000); /* Clock enable */ __RCU_AHB_CLK_ENABLE(RCU_AHB_PERI_GPIOA); __RCU_APB1_CLK_ENABLE(RCU_APB1_PERI_ADADC); __RCU_FUNC_ENABLE(LRC2_CLK); /* adc clock = LRC2(1.024MHz) */ rcu_adcclk_config(RCU_ADCLK_CFG_LRC2); if(rcu_lrc2_stabilization_wait() == ERROR) { printf("LRC2 not ready\r\n"); /* Stop here */ while(1); } else { printf("LRC2 ready\r\n"); } adc_def_init(ADC1); /* Step1:Inner-vref must soft start */ adc_vref_soft_start(ADC1); /* Step2:Config AD-ADC */ adc_config_struct_init(&adc_config); adc_config.abandont_num = ADC_ABANDONT_DATA_4; adc_config.average_num = ADC_AVERAGE_NUM_16; adc_config.convert_mode = ADC_SINGLE_CONVERT_MODE; adc_config.data_rate = ADC_DATARATE_MODE_7; adc_config.gain_select = ADC_GAIN_2; adc_config.ovrwr_mode = ADC_DATA_OVER_WRITE_NONE; adc_config.power_mode = ADC_HIGH_POWER_MODE; adc_config.rst_num = ADC_RST_CYCLE_4; adc_config.setup_time = ADC_SETUP_TIME_CYCLE_2048; adc_init(ADC1, &adc_config); /* Step3:Config PGA */ pga_config.din_select = PGA_PMOS; pga_config.pga1_enable = DISABLE; pga_config.pga_chop = PGA_CHOP_DIV_256; pga_config.pga_gain = ADC_PGA_GAIN_1; adc_pga_init(&pga_config); /* Step4:Config VREF */ vref_config.buffer_enable = ENABLE; vref_config.driver = ADC_VREF_DRV_MAX_5MA; vref_config.ref_select = ADC_REF_SELECT_INNER_2P048V; vref_config.vref_enable = ENABLE; adc_vref_init(&vref_config); /* Step5:Filter select */ adc_digital_filter_select(ADC1, ADC_FILTER_LOW_LATENCY); /* Step6:trigger config -- soft */ adc_trigger_config(ADC1, ADC_TRIGGER_MODE_SOFT, ADC_TRIGGER_SRC_RTC); adc_chop_freq_set(ADC1,ADC_CHOP_DIV_256); adc_channel_config(ADC1, ADC_INPUT_CHANNEL_8, ADC_INPUT_CHANNEL_8); /* FLASH data code handle */ T0_K = *(__IO uint32_t *)T0K_FLASH_BASE; T0_K = (T0_K & 0x000000FF) | ((T0_K & 0x00FF0000)>>8); T0_K = (T0_K - 27315); data_T0 = (((*(__IO uint32_t *)DATAT0_HIGH_FLASH_BASE) & 0x000000FF) <<16) | \ ((*(__IO uint32_t *)DATAT0_LOW_FLASH_BASE) & 0x000000FF) | \ (((*(__IO uint32_t *)DATAT0_LOW_FLASH_BASE) & 0x00FF0000 )>>8); while(1) { adc_conversion_start(ADC1); while(!__ADC_FLAG_STATUS_GET(ADC1, ADC_FLAG_DATA_EOCH)); adc_data = adc_data_convert(__ADC_CONV_VALUE_GET(ADC1)); printf("ADC temp testúAdc value is %06x\r\n",adc_data); if(adc_data >= data_T0) { adc_temp = (double)(adc_data - data_T0) * 2048 / 8388608 + (double)T0_K/100; } else { adc_temp = (double)T0_K/100 - (double)(data_T0 - adc_data) * 2048 / 8388608; } printf("tempertureúAdc value is %f\r\n",adc_temp); printf("\r\n\n\n"); delay(1000); } } uint32_t adc_data_convert(uint32_t adc_data) { if(adc_data & 0x800000) { adc_data = (~(adc_data & 0xFFFFFF))+1; adc_data &= 0x00FFFFFF; } else { adc_data &= 0x00FFFFFF; } return adc_data; } /**@brief Inserts a delay time. * * @param[in] nTime: specifies the delay time length, in milliseconds. * * @return None. */ void delay(volatile uint32_t value) { timing_delay = value; while(timing_delay != 0); } /**@brief Decrements the timing_delay variable. * * @param[in] None. * * @return None. */ void timing_delay_decrement(void) { if (timing_delay != 0x00) { timing_delay--; } } #ifdef USE_FULL_ASSERT /**@brief Report the assert error. * * @param[in] file: pointer to the source file name. * * @param[in] line: error line source number. * * @return None. */ void assert_failed(uint8_t* file, uint32_t line) { while(1); } #endif
最新发布
07-30
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值