最近做项目用到STM32F051的片子,遇到了两个小坑。
我的一个项目,需要ADC采集。两路ADC输入通道。PA0-ADCIn0; PA1-ADCIn1.
一开始想使用最简单的方式,单次转换。第一次采In0, 第2次采集In1.
STM32F0 的ADC库里面提供了ADC转换的函数:如下:
ADC_StartOfConversion(ADC1);
while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
AdcProValRig[AdcLoopId] =ADC_GetConversionValue(ADC1);
ADC_StopOfConversion(ADC1);
解释:ADC_StartOfConversion 开始连续转换,也可以配置为,不是连续转换。在ADC初始化结构体中配置。
然后等待ADC转换结束,然后读取ADC的转换结果(同时会自动清空EOC标识)。
然后停止转换。
接下来采集In1 , 理所当然,在采集前配置ADC的通道指向In1.
ADC_ChannelConfig(ADC1, ADC_Channel_1 , ADC_SampleTime_71_5Cycles);
但是设置完了之后,发现,根本没有鸟用啊。 采集的数据还是 之前IN0的通道。WHAT???
最后去看了一下原函数:居然是或运算!!!! 我的理解是,STM32 的ADC库设计,让你尽量使用规则或者注入模式去使用ADC。如下:
void ADC_ChannelConfig(ADC_TypeDef* ADCx, uint32_t ADC_Channel, uint32_t ADC_SampleTime)
{
uint32_t tmpreg = 0;
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_ADC_CHANNEL(ADC_Channel));
assert_param(IS_ADC_SAMPLE_TIME(ADC_SampleTime));
/* Configure the ADC Channel */
ADCx->CHSELR |= (uint32_t)ADC_Channel;
/* Clear the Sampling time Selection bits */
tmpreg &= ~ADC_SMPR1_SMPR;
/* Set the ADC Sampling Time register */
tmpreg |= (uint32_t)ADC_SampleTime;
/* Configure the ADC Sample time register */
ADCx->SMPR = tmpreg ;
}
那就直接写通道到寄存器吧:
ADC1->CHSELR = ADC_CHSELR_CHSEL1;
第2个小坑: 就是在向FLASH 写入参数的时候,单片机会死机,后来找到问题了,在写FLASH的时候,要关闭中断。可能是我写入到FLASH的内容多,时间长,写进入后,还要读出来,校验。而我的串口通讯,波特率时38400很快,读写FLASH期间,频繁的进入中断,导致死机。
上一篇:MDK V5.12 + ST-Link V2 + Win10 STM32开发环境搭建1
下一篇:stm32 实现串口中断接收浮点型、整型数据
推荐阅读
史海拾趣
Elma在美国和美洲拥有广泛的客户群,覆盖电信、工业控制、医疗电子、国防和航空航天等多个行业。其产品线包括外壳、背板、系统平台、机柜、高品质开关和编码器等多种零件,能够满足不同行业客户的多样化需求。这种跨行业的布局使得Elma能够在多个领域保持竞争力。
芯茂微电子始终坚持品质至上和客户至上的原则,致力于为客户提供高品质、高性能的集成电路产品和服务。公司建立了完善的质量管理体系和客户服务体系,从产品研发、生产、销售到售后服务,每一个环节都严格把控,确保产品质量和客户满意度。正是凭借这种对品质和客户的执着追求,芯茂微电子赢得了客户的广泛信赖和赞誉。
近年来,随着国家对集成电路产业的重视和支持力度的不断加大,芯茂微电子也积极响应国家号召,致力于推动国产集成电路产业的发展和自主创新。公司加强了对核心技术的研究和投入,积极引进和培养高端人才,加强与国内外知名企业和研究机构的合作与交流。同时,公司也积极参与国家重大科研项目和产业化项目,为推动我国集成电路产业的发展和自主创新做出了积极贡献。这些努力不仅提升了芯茂微电子的技术实力和市场竞争力,也为我国集成电路产业的发展注入了新的活力和动力。
以上五个故事仅代表芯茂微电子在电子行业发展过程中的一部分经历和成就。随着公司的不断发展和壮大,相信未来还会有更多精彩的故事等待我们去发现和书写。
深圳市固得沃克电子有限公司(GOODWORK)的故事始于2004年,当时公司正式成立,专注于半导体分立器件的研发、生产和销售。公司总部设在深圳,并创立了自主品牌“GK”。这一时期的固得沃克,凭借对技术的执着追求和对市场的敏锐洞察,逐步在电子行业站稳脚跟。公司初期虽面临诸多挑战,但凭借团队的坚持和创新精神,逐渐赢得了客户的信赖,为后续的快速发展奠定了坚实基础。
随着技术的不断升级和产品线的完善,Broyce Control开始将目光投向国际市场。80年代,公司成功打入欧洲市场,为多家跨国企业提供优质的电气和电子产品。随后,Broyce Control又陆续进入北美和亚洲市场,通过设立分公司和建立销售网络,不断提升品牌影响力和市场份额。在国际市场的竞争中,Broyce Control凭借其卓越的产品质量和专业的服务赢得了客户的广泛赞誉。
基于虚拟仪器的核能海水谈化实验测控平台为了研究竖直蒸发管高温多效海水淡化(VTEMED)系统的工艺流程和关键工艺技术及稳定运行时学参数影响等,清华大学核能与新能源技术研究院建立了大型双塔4效高温多效海水淡化实验装置。为位的温度、压强及流 ...… 查看全部问答∨ |
Atmega48-串口电压表(pdf)+Atmega48/88/168的基本程序(还没亲自试验) 一个蛮好玩的设计。 主要就是Atmega48的AD和串口通信部分,总体不是很难的。 可以自己动手做一个…… [ 本帖最后由 mxdaiyi 于 2010-1-20 17:10 编辑 ]… 查看全部问答∨ |
欢迎满足以下条件之一的有识之士与我们联系,公司网址: www.nerc.com.cn,发送简历邮箱地址:whl668@epri.ac.cn。 1.具有2年以上电力行业嵌入式产品开发经验。 2. ...… 查看全部问答∨ |
100PIN的IO方式点亮T6963液晶控制器240*128LCD STM32F103VET6接T6963控制器LCD(240*128),本来想用FSMC来驱动的,但搞了几天都没成功,现用IO方式十分钟就成功点亮LCD。现在源程序与大家分享。现在主要问题是刷屏速度较慢(清屏时从上到下明显看到一过程)。后面还是想用FSMC方式。希望现在所 ...… 查看全部问答∨ |
有银要看EWSTM8的小白鼠,,,俺就是一只,不过是只老的。 上一个PP, 下载 (109.87 KB) 2010-5-20 12:54 再上一个小白鼠入门记。 IAR EWSTM8工程创建.pdf (636.96 KB) 下载次数: 136 2010-5-20 12:54 ...… 查看全部问答∨ |
|
[程序附件: 硬件 视频 $(\'swf_JTj\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', encodeURI(\'http://player.y ...… 查看全部问答∨ |
|
要在51单片机实现精准时钟汇编程序,要求:能显示年月日时分秒,误差是0.01,还有需要整点提示。用c语言可能方便点,但是要求用汇编,我就不知道了,能不能有高手 解答一下。。。。。… 查看全部问答∨ |