免费做A爰片久久毛片A片下载_中文欧美三级精品_免费一级少妇A片无码专区_日韩亚洲三级片在线视频_国产熟女Aa级毛片_无码亚中文字幕2021_亚洲国产精品不卡在线观看_成人欧美一区二区三区1314_日本午夜精品理论片a级_337p日本欧洲亚洲大胆

網(wǎng)站導航

首頁 > 解決方案 > 技術(shù)點滴

技術(shù)點滴

2018-06-08 STM32的ADC產(chǎn)生隨機數(shù)

針對STM32,沒有隨機數(shù)發(fā)生器,我自己寫了個函數(shù),利用ADC懸空引腳產(chǎn)生隨機數(shù),作為srand()的種子輸入,代碼如下:  #include "stm32f10x_adc.h"  //初始化ADC //這里我們僅以規(guī)則通道為例 //我們默認將開啟通道0~3                                                    void  Adc_Init(void) {          ADC_InitTypeDef ADC_InitStructure;      GPIO_InitTypeDef GPIO_InitStructure;     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1, ENABLE );      //使能ADC1通道時鐘       RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //設(shè)置ADC分頻因子6 72M/6=12,ADC最大時間不能超過14M     //PA1 作為模擬通道輸入引腳, 一定要用懸空腳,否則獲取的隨機數(shù),不隨機                              GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;        //模擬輸入引腳     GPIO_Init(GPIOA, &GPIO_InitStructure);         ADC_DeInit(ADC1);  //復位ADC1,將外設(shè) ADC1 的全部寄存器重設(shè)為缺省值     ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;    //ADC工作模式:ADC1和ADC2工作在獨立模式     ADC_InitStructure.ADC_ScanConvMode = DISABLE;    //模數(shù)轉(zhuǎn)換工作在單通道模式     ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//DISABLE;    //模數(shù)轉(zhuǎn)換工作在單次轉(zhuǎn)換模式     ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;    //轉(zhuǎn)換由軟件而不是外部觸發(fā)啟動     ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;    //ADC數(shù)據(jù)右對齊     ADC_InitStructure.ADC_NbrOfChannel = 1;    //順序進行規(guī)則轉(zhuǎn)換的ADC通道的數(shù)目     ADC_Init(ADC1, &ADC_InitStructure);    //根據(jù)ADC_InitStruct中指定的參數(shù)初始化外設(shè)ADCx的寄存器     ADC_Cmd(ADC1, ENABLE);    //使能指定的ADC1     ADC_ResetCalibration(ADC1);    //使能復位校準       while(ADC_GetResetCalibrationStatus(ADC1));    //等待復位校準結(jié)束     ADC_StartCalibration(ADC1);     //開啟AD校準     while(ADC_GetCalibrationStatus(ADC1));     //等待校準結(jié)束     ADC_SoftwareStartConvCmd(ADC1, ENABLE);        //使能指定的ADC1的軟件轉(zhuǎn)換啟動功能 } //獲得ADC值 //ch:通道值 0~3 /*采集4次ADC的值,每次取采集的第四位,拼成16位作為種子*/ u16 Get_Adc_RandomSeek(void)    {     uint8_t Count;     uint16_t ADC_RandomSeek = 0;     //設(shè)置指定ADC的規(guī)則組通道,一個序列,采樣時間     ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5 );    //ADC1,ADC通道,采樣時間為239.5周期                           ADC_SoftwareStartConvCmd(ADC1, ENABLE);        //使能指定的ADC1的軟件轉(zhuǎn)換啟動功能         for(Count = 0; Count < 4; Count++){         while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待轉(zhuǎn)換結(jié)束         ADC_RandomSeek <<= 4;         ADC_RandomSeek += ADC_GetConversionValue(ADC1) & 0x000f; /*采集4次ADC的值,每次取采集的第四位,拼成16位作為種子*/     }     ADC_SoftwareStartConvCmd(ADC1,DISABLE);     return ADC_RandomSeek; } void Test(void) {     Adc_Init();     srand(Get_Adc_RandomSeek());        printf("rand(1) -> %04x\n", rand()); } - 中巨偉業(yè) - 

mKONhwolsgPDD3BeJWguEMza2KIiTiW6Wt9qcelzuzsLGXcnx7csfaD1SJ18MJ16IGE3tC4OqH2RzC+Mrse+heEl49hkI7iAqh0FyAXa32SJekMUjaLzBDBr2ktotYFxlunwClWOM4OuGibKC3Xdp01NZ9g8MRipSnhpnwzgEKjYPrm9bhzqG/Tr2T67cm8Hft2T8aVG8i0wvwfKPAzZzHhVHoR1FhDv