新人求助,stm8l151k4 ad采样的问题
这个AD速度没那么快,能说的详细点吗
看看你的变量是什么类型的 可能是溢出了
注意 chai
unsigned char
int
unsigned int 等类型变量的范围
void ADC_Periph_Init(void)
{
u8 idx;
CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE);//使能ADC时钟
CLK_PeripheralClockConfig(CLK_Peripheral_DMA1, ENABLE);//使能DMA1时钟
GPIO_Init(GPIOB,GPIO_Pin_5,GPIO_Mode_In_FL_No_IT);//浮空输入
ADC_Cmd(ADC1,ENABLE);//打开ADC
for (idx = 0;idx < 50;idx++);//adc上电需要一段时间
ADC_VrefintCmd(ENABLE);//使能内部参考电压
ADC_DMACmd(ADC1,ENABLE);//使用ADC的DMA功能
//连续转换模式
ADC_Init(ADC1, ADC_ConversionMode_Continuous,ADC_Resolution_12Bit, ADC_Prescaler_1);
//ADC_SamplingTimeConfig(ADC1, ADC_Group_FastChannels, ADC_SamplingTime_192Cycles);
//ADC_SamplingTimeConfig(ADC1, ADC_Group_SlowChannels,ADC_SamplingTime_192Cycles);
ADC_SamplingTimeConfig(ADC1, ADC_Group_SlowChannels, ADC_SamplingTime_384Cycles);
ADC_ChannelCmd(ADC1, ADC_Channel_Vrefint, ENABLE);//内部参考电压
ADC_ChannelCmd(ADC1, ADC_Channel_13, ENABLE);//通道13 PB5
SYSCFG_REMAPDMAChannelConfig(REMAP_DMA1Channel_ADC1ToChannel0);
DMA_Init(DMA1_Channel0,//通道0
(uint32_t)&ADC_ConvertedValue,//缓冲区地址
(uint16_t)ADC1_DR_Address,//ADC数据寄存器地址
DMA_BUF_SIZE,//缓冲区大小
DMA_DIR_PeripheralToMemory,//外设到内存
DMA_Mode_Circular,//循环转换
DMA_MemoryIncMode_Inc,//内存地址自增
DMA_Priority_High,//优先级为高
DMA_MemoryDataSize_HalfWord);//内存数据是半字位宽
DMA_SetCurrDataCounter(DMA1_Channel0,DMA_BUF_SIZE);//设置转速的数据个数
DMA_ITConfig(DMA1_Channel0,DMA_ITx_TC, ENABLE);//使能传输完成中断
DMA_ITConfig(DMA1_Channel0,DMA_ITx_HT, DISABLE);
DMA_Cmd(DMA1_Channel0,ENABLE);//使能通道0
DMA_GlobalCmd(ENABLE);//打开DMA
ADC_SoftwareStartConv(ADC1);//software trigger
}
//DMA中断
INTERRUPT_HANDLER(DMA1_CHANNEL0_1_IRQHandler,2)
{uint16_t *p;
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
if(DMA_GetITStatus(DMA1_IT_TC0) != RESET)
{
p=&ADC_ConvertedValue[0];
Data_Pack_handle(p);
DMA_ClearITPendingBit(DMA1_IT_TC0);
}
}
//数据打包函数。
void Data_Pack_handle(uint16_t *P_DMA_data)
{uint8_t i;
for(i=0;i<DMA_BUF_SIZE;i++)
adc_val[i] = *P_DMA_data++;
}
void main(void)
{uint8_t sum,i;
Sys_clk_config();
Port_Init();
ADC_Periph_Init();
//MWWDG_Init();//窗口看门狗初始化函数
enableInterrupts();//开中断
while (1)
{
test = search_form(ADC_ConvertedValue[3]);
temp_val = test-20;
}
连续采8个数,1000 1400 1000 1404 1001 1400 1000 1404 大概就是这样的采样结果,应该是800多才对呢。数据不是线性变化的。
lcd段码,和led段码一样的吧,主要的是要看硬件电路什么样,通信电平是否一直,电源什么样子,背光什么要求,驱动软件,要看lcd是什么接口的,就是要具体分析啦。
STM8L和STM8S到底选哪个好
这个要看你用在什么场合,如果是用在内置电池的便携式设备的话,由于考虑到待机时间,以及电池在电压比较低的时候,单片机还要能够正常工作的话,就要选用STM8L系列。因为这个系列的功耗比较低,而且能够在很低的工作电压下工作。如果是用在固定供电的设备上的话,选用STM8S系列不错!价格相对来说也比较...
手把手教你STM8单片机标准库移植
步骤一:下载STM8标准库 在百度搜索或ST官网下载STM8L101标准库。官网下载需注册账号,确保资料获取。步骤二:使用IAR新建工程 在IAR for STM8中新建STM8单片机工程,保存至指定文件夹。选择C语言,保存配置后,界面显示工程文件和标准库文件。步骤三:移植标准库 在标准库文件夹中复制指定文件至工程文件...
stm8的L系列与S系列有何区别,还有stm8共有几个系列都有和特点?_百度知 ...
S为standard的意思,也就是标准系列(或主流系列)。L为low power,也就是低功耗系列。A为automotive为汽车应用系列。一般人不常用。最近新出了一个T系列,touch 系列,GPIO管脚做了特殊处理,支持触摸键。
stm8l151与152的不同点
不同点在于以下几个方面:1、Flash存储器大小不同:STM8L151有8KB的Flash存储器,而STM8L152有16KB的Flash存储器。2、RAM大小不同:STM8L151有2KB的RAM,而STM8L152有4KB的RAM。3、端口数量不同:STM8L151有24个GPIO(通用输入输出端口),而STM8L152有32个GPIO。4、定时器数量不同:STM8L...
STM8\/STM8L的核心硬件缺陷
在STM8相对应的错误报告中,的确将ITC部分的Bug列为“ 没有解决方案,也没有解决计划 ”的严重错误。在STM8L上别使用RIM\/SIM语句,即便要用也需要关闭对应IT_CONFIG,如果是EXTI中断,则自求多福。比较建议使用STM32L0XX,或者其他家的Cortex-M0+内核处理器,其实MSP430也可以用。望周知,别踩坑。
求指点STM8L152和STM8L052之间的区别
基本是一样的。主要区别在052没有UINIQUE ID了;同时052的eeprom容量变少了,还有就是052的FLASH擦写次数变少了,保证100次,不过也够用了。
stm8l时钟对低功耗的影响
stm8l系列微控制器的时钟对于低功耗应用的影响如下:1、stm8l系列微控制器的时钟可以通过设置时钟源来控制。时钟源可以是内部RC振荡器、外部晶体振荡器、外部RC振荡器等。在低功耗模式下,可以选择使用内部RC振荡器作为时钟源,这样可以减少功耗。2、stm8l系列微控制器还提供了多种低功耗模式,包括睡眠...
新人求助,stm8l151k4 ad采样的问题
Init();\/\/MWWDG_Init();\/\/窗口看门狗初始化函数 enableInterrupts();\/\/开中断 while (1){ test = search_form(ADC_ConvertedValue[3]);temp_val = test-20;} 连续采8个数,1000 1400 1000 1404 1001 1400 1000 1404 大概就是这样的采样结果,应该是800多才对呢。数据不是线性变化的。
求教stm8l将系统时钟切换到外部晶振
首先看一下 STM8S103K3 的时钟结构图,可以帮助你很好的理解。 这里有几个时钟,就是图中标识的时钟,需要弄清楚一下:fHSE: 外部高速晶振时钟,它是由外部晶振产生,大小由外部晶振大小决定,STM8S的外部晶振范围:1-24M,看图中的”HSE OSC 1-24M“。fHSI:内部RC高速时钟,它是由内部的RC震荡...
求助,关于STM8L051F3芯片,多路ADC采集DMA传输遇到的问题
程序中使用ADC1采样一个外部输入,一个内部参考电压的 电压,其中出现了两通道的数据错位问题,即有时数组第 一个数与该数组第二个数据交换了,在网上找了很久=都 没神马结果,最后只能将ADC的连续转换模式设置成单次转换 即ADC_Init(ADC1, ADC_ConversionMode_Continuous, ADC_Resolution_12Bit, ...
杜朱六味: 其实STM8算比较简单,可以自己做块开发板,只要简单的功能就可以,如从IO输出接个LED发光管,加个烧录的接口就可以.这样也可自己学学画板子,一举两得,呵呵.
歙县18017713905: STM8L151FX 单片机 可以使用内部时钟电路 作为 时钟源吗??
杜朱六味: 内部时钟电路 作为 时钟源是肯定可以的.应用中要注意频率误差和器件的频率离散性.
歙县18017713905: STM8不能中断定时器,怎么搞啊!? - ?
杜朱六味: L系列的定时器,中断默认是关闭的,需要手动开启,你的代码里面没有开启.S系列的是默认开启,所有不是设置.
歙县18017713905: stm8l151c8是中容量还是大容量 - ?
杜朱六味: 小容量是16~32K 中容量是64~128K 大容量是大于256K
歙县18017713905: STM8L 读取RTC时间,误差惨不忍睹 求助 - ?
杜朱六味: 板子 芯片用的是stm8l051f3,16MHZ,设置LSE时钟16分频,我设置RTC_SetWakeUpCounter(1023),就是1s唤醒一次,我用的是ST-link v2,软件是iar.
歙县18017713905: stm8l151F3单片机 使用STVD编译 如何设置单个IO口为高电平 - ?
杜朱六味: public class jiujiu { public static void main(String[] args) { int i=0; int j=0; for(i=1;i{ for(j=1;jSystem.out.print(i+"*"+j+"="+i*j+"\t"); System.out.println(); }
歙县18017713905: stm8L051f3固件库还没有出来吗 - ?
杜朱六味: 051的库一直都有,跟151的库在一起,只需要更改一下宏定义,如下图
歙县18017713905: stm32l151使用什么软件开发 - ?
杜朱六味: 软件开发 非技术区 厂商 家园 活动 二手 快捷导航 自动登录 登录 找回密码 ... 关于STM8L15x 的参考手册 medium 跟 medium+
歙县18017713905: stm8L151G 有几个串口 - ?
杜朱六味: 能提供1个串口的STM8L系列的CPU,现在只有STM8S的双串口.
歙县18017713905: stm8l151ff3怎么配置串口 - ?
杜朱六味: 程序看了没什么问题,仿真一下把断点放在for循环里面,看看什么问题.