书山有路勤为径------2018年元旦

2019-08-13 18:48发布

算算时间过得真快,已经进入8月了,还有5个月就要元旦了,开篇帖子记录自己学习STM32的经历。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
24条回答
20151470
1楼-- · 2019-08-15 13:40
加油。。。。。。
刘东君
2楼-- · 2019-08-15 14:30
2017/8/23  五、 端口复用及重映射

1)GPIO与外设串口、ADC、DAC公用一个引脚,需要配置寄存器确定引脚是作为GPIO使用,还是作为外设使用。
2)端口复用步骤:
①IO口时钟使能。
②复用功能时钟使能。   //比如串口,就是串口时钟使能。
③IO口引脚8中配置模式查询。确定复用功能使用哪种模式。
④IO口初始化。
3)重映射目前不学习,使用概率比较低。
守候ocean
3楼-- · 2019-08-15 20:15
加油 我觉得自己也应该学习下你 开个贴记录下学习过程
刘东君
4楼-- · 2019-08-15 23:20
 精彩回答 2  元偷偷看……
刘东君
5楼-- · 2019-08-16 04:50
2017/8/24  七  ADC采集

1) STM32拥有三个ADC采集通道,精度12位。
QQ截图20170824090936.png
2)ADC单次转换
//获得ADC值
//ch:通道值 0~3
u16 Get_Adc(u8 ch)   
{
          //设置指定ADC的规则组通道,一个序列,采样时间
        ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_1Cycles5 );        //ADC1,ADC通道,采样时间为239.5周期                                      

        ADC_SoftwareStartConvCmd(ADC1, ENABLE);                //使能指定的ADC1的软件转换启动功能       
         
        while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束

        return ADC_GetConversionValue(ADC1);        //返回最近一次ADC1规则组的转换结果
}

u16 Get_Adc_Average(u8 ch,u8 times)
{
        u32 temp_val=0;
        u8 t;
        for(t=0;t<times;t++)
        {
                temp_val+=Get_Adc(ch);
                delay_us(2);
        }
        return temp_val/times;
}        

        while(1)
        {

                static u8 i=0;
               
                                        adcx[0]=Get_Adc_Average(ADC_Channel_10,10);   //3ms 执行完成 4次ADC转换。
                                        adcx[1]=Get_Adc_Average(ADC_Channel_11,10);
                                        adcx[2]=Get_Adc_Average(ADC_Channel_12,10);
                                        adcx[3]=Get_Adc_Average(ADC_Channel_13,10);


                //adcx=Get_Adc_Average(ADC_Channel_1,10);
                LCD_ShowxNum(156,130+i*40,adcx,4,16,0);//显示ADC的值
                temp=(float)adcx*(3.3/4096);
                adcx=temp;
                LCD_ShowxNum(156,150+i*40,adcx,1,16,0);//显示电压值
                temp-=adcx;
                temp*=1000;
                LCD_ShowxNum(172,150+i*40,temp,3,16,0X80);
                LED0=!LED0;
                delay_ms(200);
                if(i>=3)
                {
                i=0;
                }
                else
                {
                        i++;
                }

               
        }
}


经测试执行4个通道采集任务最快1ms,此时屏蔽 delay_us(2);延时,设置单次采用时间为:ADC_SampleTime_1Cycles5 ,目前采用delay_us(2),实测时间为3ms


3)连续模式-----待续



赵士亮
6楼-- · 2019-08-16 08:14
向楼主学习!

一周热门 更多>