欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
Proteus仿真stm32讀取ADC源程序
[打印本頁(yè)]
作者:
仰天大笑出門(mén)去
時(shí)間:
2019-5-12 13:43
標(biāo)題:
Proteus仿真stm32讀取ADC源程序
stm32課程的一個(gè)項(xiàng)目,用protues仿真stm32讀取ADC,做完之后把這些分享下來(lái)。
0.png
(31.91 KB, 下載次數(shù): 136)
下載附件
2019-5-12 15:50 上傳
單片機(jī)源程序如下:
//#include "main.h"
#include "stm32f10x.h"
#include "stm32f10x_it.h"
#include <stdio.h>
#define ADC1_DR_Address ((uint32_t)0x40012400+0x4C)
u8 seg_table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0x39,0x5e,0x79,0x71}; //共陰極表
uint16_t ADCConvertedValue;
uint32_t DMA_ADC_OK;
void NVIC_Config(void);
void ADC_Config(void);
void delay(void);
void xdelay(void);
void GPIO_Config(void);
u16 Get_Adc(u8 ch);
//u16 Get_Adc_Average(u8 ch,u8 times);
int main(void)
{
float temp=0;
DMA_ADC_OK = 0;
NVIC_Config();
SysTick_Config(72000);
ADC_Config();
GPIO_Config();
while(1)
{
int p,q;
// GPIO_ResetBits(GPIOA,GPIO_Pin_8);
// GPIO_ResetBits(GPIOD,GPIO_Pin_2);
// delay();
// GPIO_SetBits(GPIOA,GPIO_Pin_8);
// GPIO_SetBits(GPIOD,GPIO_Pin_2);
// delay();
if(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)!= RESET)
{
DMA_ADC_OK = 1;
ADC_ClearFlag(ADC1, ADC_FLAG_EOC);
}
if(DMA_ADC_OK)
{
ADCConvertedValue=ADC_GetConversionValue(ADC1);
//ADCConvertedValue=Get_Adc(ADC_Channel_1);
temp = (float)ADCConvertedValue* (3.3/4096);
if (temp>=1)
{
temp=temp+1;
//GPIO_WriteBit(GPIOA,GPIO_Pin_3,
// (BitAction)((1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_3))));
p=(int)temp;
temp=(temp-p)*10;
q=(int)temp;
GPIOB->ODR=0xfa; // 高位
GPIOC->ODR=seg_table[p];
xdelay();
GPIOB->ODR=0xfd; // 低位
GPIOC->ODR=seg_table[q];
xdelay();
}
else {
temp=temp*10;
q=(int)temp;
GPIOB->ODR=0xfa; // 高位
GPIOC->ODR=0xc0;
xdelay();
GPIOB->ODR=0xfd; // 低位
GPIOC->ODR=seg_table[q+1];
xdelay();
}
}
}
}
/*NVIC??*/
void NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/* DMA??NVIC?? */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void ADC_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
ADC_InitTypeDef ADC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1, ENABLE);//PC4
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
ADC_DeInit(ADC1);
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5);
ADC_Cmd(ADC1, ENABLE); //使能指定的ADC1
ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}
void delay(void)
{
int i=0xffa;
while(i--);
}
void xdelay(void)
{
int i=0xfff;
while(i--);
}
void GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* GPIOD Periph clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//PC4
/* Configure PD2 in output pushpull mode */
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
// GPIO_Init(GPIOA, &GPIO_InitStructure);//PD2????,?????
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);//PD2????,?????
/* Configure PD2 in output pushpull mode */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);//PD2????,?????
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//PC4
// /* Configure PD2 in output pushpull mode */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);//PD2????,?????
//
// /* Configure PA8 in output pushpull mode */
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
// GPIO_Init(GPIOC, &GPIO_InitStructure);//PD2????,?????
}
void xianshi(float x)
{ GPIO_InitTypeDef GPIO_InitStructure; //定義一個(gè)管腳初始化的結(jié)構(gòu)體
//開(kāi)啟PA口時(shí)鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
//配置PA所有的模式
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
}
void ADC1_2_IRQHandler(void)
{
if(ADC_GetITStatus(ADC1, ADC_IT_EOC)!= RESET)
{
DMA_ADC_OK=1;
ADC_ClearITPendingBit(ADC1, ADC_IT_EOC);
}
}
復(fù)制代碼
所有資料51hei提供下載:
keil.zip
(325.06 KB, 下載次數(shù): 358)
2019-5-12 13:42 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
proteus.zip
(188.01 KB, 下載次數(shù): 356)
2019-5-12 13:42 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
aaronxx
時(shí)間:
2019-5-26 15:00
學(xué)習(xí)
作者:
LuminousRascal
時(shí)間:
2020-6-16 13:09
有沒(méi)有HEX文件啊
作者:
gemini12
時(shí)間:
2020-6-16 21:06
謝謝樓主,雪中送碳啊,樓主天使
作者:
heiyues
時(shí)間:
2020-6-16 21:07
感謝樓主大恩大德!
作者:
15130498112
時(shí)間:
2020-6-16 22:00
Proteus下下來(lái)打不開(kāi)
作者:
lhf58
時(shí)間:
2020-6-18 15:52
謝謝樓主,雪中送碳啊,樓主天使
作者:
cookidog
時(shí)間:
2020-10-15 20:26
這個(gè)dma只是個(gè)變量?
作者:
cookidog
時(shí)間:
2020-10-15 20:31
這個(gè)好像沒(méi)有dma啊
作者:
trenlyn
時(shí)間:
2020-10-16 09:51
這個(gè)不錯(cuò)的,可惜Proteus不支持STM8S仿真。
作者:
zou1904
時(shí)間:
2021-6-16 15:41
為啥我開(kāi)adc就卡死
作者:
jyoi
時(shí)間:
2021-9-5 11:18
實(shí)測(cè)有效,但是ad采樣精度有點(diǎn)問(wèn)題
作者:
a53135324
時(shí)間:
2021-9-14 09:37
感謝樓主分享,正需要一個(gè)ADC采集的
作者:
Hjc12345678
時(shí)間:
2022-2-18 00:00
本帖最后由 Hjc12345678 于 2022-2-18 00:14 編輯
沒(méi)有用到DMA,程序問(wèn)題較多,如xiangshi()沒(méi)用到,p,q取用也有問(wèn)題,不用DMA的話(huà)仿真數(shù)碼管顯示會(huì)閃爍,原因是轉(zhuǎn)換需要時(shí)間太長(zhǎng)導(dǎo)致。
作者:
easyming
時(shí)間:
2022-7-1 17:43
到底有用木有用,有仿真驗(yàn)證過(guò)的嗎?
作者:
2932735693
時(shí)間:
2024-2-12 21:21
我用了移植的時(shí)候一切正常,但是我發(fā)現(xiàn)ADC只在開(kāi)機(jī)時(shí)測(cè)量一次
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1