ARM程序设计题目与复习.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ARM程序设计题目与复习

红色的是我加上的程序或改过的程序,黑色的是光盘原版程序 试配置STM32系统的主控时钟配置成24M的例子。 //系统时钟初始化函数 //pll:选择的倍频数,从2开始,最大值为16 void Stm32_Clock_Init(u8 PLL) { unsigned char temp=0; MYRCC_DeInit(); //复位并配置向量表 RCC-CR|=0 //外部高速时钟使能HSEON while(!(RCC-CR17));//等待外部时钟就绪 RCC-CFGR=0 //APB1=DIV2;APB2=DIV1;AHB=DIV1; PLL-=2;//抵消2个单位 RCC-CFGR|=PLL18; //设置PLL值 2~16 RCC-CFGR|=116; //PLLSRC ON FLASH-ACR|=0x32; //FLASH 2个延时周期 RCC-CR|=0 //PLLON while(!(RCC-CR25));//等待PLL锁定 RCC-CFGR|=0//PLL作为系统时钟 while(temp!=0x02) //等待PLL作为系统时钟设置成功 { temp=RCC-CFGR2; temp=0x03; } } int main(void) { Stm32_Clock_Init(3);//系统时钟设置 } 编写程序外部通道输入一个电压,并用ADC的DMA模式采样100个数据,然后用UART将ADC采样的100个电压数据传输到电脑上。 void Adc_Init(void) { //先初始化IO口 RCC-APB2ENR|=12; //使能PORTA口时钟 GPIOA-CRL=0XFFFFFF0F;//PA1 anolog输入 //通道10/11设置 RCC-APB2ENR|=19; //ADC1时钟使能 RCC-APB2RSTR|=19; //ADC1复位 RCC-APB2RSTR=~(19);//复位结束 RCC-CFGR=~(314); //分频因子清零 //SYSCLK/DIV2=12M ADC时钟设置为12M,ADC最大时钟不能超过14M! //否则将导致ADC准确度下降! RCC-CFGR|=214; ADC1-CR1=0XF0FFFF; //工作模式清零 ADC1-CR1|=016; //独立工作模式 ADC1-CR1=~(18); //非扫描模式 ADC1-CR2=~(11); //单次转换模式 ADC1-CR2=~(717); ADC1-CR2|=717; //软件控制转换 ADC1-CR2|=120; //使用用外部触发(SWSTART)!!! 必须使用一个事件来触发 ADC1-CR2|=18; //使用DMA ADC1-CR2=~(111); //右对齐 ADC1-SQR1=~(0XF20); ADC1-SQR1|=020; //1个转换在规则序列中 也就是只转换规则序列1 //设置通道1的采样时间 ADC1-SMPR2=~(73); //通道1采样时间清空 ADC1-SMPR2|=73; //通道1 239.5周期,提高采样时间可以提高精确度 ADC1-CR2|=10; //开启AD转换器 ADC1-CR2|=13; //使能复位校准 while(ADC1-CR213); //等待校准结束 //该位由软件设置并由硬件清除。在校准寄存器被初始化后该位将被清除。 ADC1-CR2|=12; //开启AD校准 while(ADC1-CR212); //等待校准结束 //该位由软件设置以开始校准,并在校准结束时由硬件清除 } //获取通道ch的转换值,取times次,然后平均 //ch:通道编号 //times:获取次数 //返回值:通道ch的times次转换结果平均值 u16 Get_Adc_Average(u8 ch,u8 times) { u32 temp_val=0; u8 t; for(t=0;ttimes;t++) { temp_val+=Get_Adc(ch); delay_ms(5); } return temp_val/times; }

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档