STM32程序移植的一些注意方法
来源:互联网 发布:淘宝导航条图片 编辑:程序博客网 时间:2024/04/29 10:05
一,步骤
建立需要的子函数及将对应的函数在所有子函数之前声明。另一种方法是:新建一个子函数(.c)文件和头文件库(.h)文件,分别保存在用户文件夹中(这个文件夹是主函数所在的文件夹),将刚刚保存的子函数文件添加到程序文件夹中(保存在主函数所在的文件夹并不表示包含到了函数里,因此要在编程软件(即开发环境)添加,添加方法详见http://blog.csdn.net/ambizxzh/article/details/74324288)
移植的方法也可以参照上面这个链接。
二,注意
1,在配置子函数文件时,当出现多个结构体时结构体要在任何结构体元素赋值之前,也就是说对于A结构体,它必须放在A结构体、B结构体、C…等结构体的结构体元素赋值之前否则会出现错误
void TIM3_Configuration(void){ TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct; TIM_OCInitTypeDef TIM_OCInitStructure; GPIO_InitTypeDef GPIO_InitStructure; //GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);//端口映射,详见STM32中文参考手册p119 //定时器初始化 TIM_TimeBaseStruct.TIM_Period=899;//初值(在72M下,计数900个(内部自动加1,所以899)) TIM_TimeBaseStruct.TIM_Prescaler=0;/预分频为0,位系统频率72M TIM_TimeBaseStruct.TIM_ClockDivision=0; TIM_TimeBaseStruct.TIM_CounterMode=TIM_CounterMode_Up;//向上 TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStruct); //pwm 初始化 TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;//模式1下,小于寄存器设定值(占空比)为高,大于为低,输出电平不同 TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//比较输出使能 TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;//输出为低电平 TIM_OC2Init(TIM3,&TIM_OCInitStructure); TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);//使能预装载寄存器,以可以多次使用 TIM_Cmd(TIM3,ENABLE);//定时器标志位打开 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_Init(GPIOA,&GPIO_InitStructure); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//子函数配置时,引脚结构体初始化,然后才能对应引脚时钟配置 }
2,主函数在调用子函数文件时,要注意死循环,应为前面使用这类循环之后,在后面调用的子函数都得不到执行,可以看到下面的主函数先后调用了两个含有死循环的子函数,在这种情况下,只有放在前面的子函数会不断的在自己的死循环中执行,不会跳出去,因此,后面的部分不会起作用,因此,不管两者的位置如何调换,总有在这死循环后面的函数无法执行。
如:主函数
int main(void){ u16 n=0; OLED_Init(); //初始化OLED OLED_Clear(); RCC_Configuration(); //系统时钟初始化 GPIO_Configuration();//端口初始化 TIM3_Configuration();//定时器和pwm配置 PWM_Out(); OLED_Print();}
子函数void PWM_Out(void);
void PWM_Out(void){ u8 led_fx=1; u16 led_dt=0; while(1)//死循环 { delay_ms(10); if(led_fx==1) { led_dt++; } else { led_dt--; } if(led_dt>300) led_fx=0; if(led_dt==0) led_fx=1; TIM_SetCompare2(TIM3,led_dt);}}
子函数void OLED_Print(void);
void OLED_Print(void){ u32 ad=0; u8 i=0; u8 k=10; u16 n=0; u32 temp=0; float temp1=0; float da=0; ad=0; for(i=0;i<50;i++) { ADC_SoftwareStartConvCmd(ADC1,ENABLE); while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)); ad=ad+ADC_GetConversionValue(ADC1); } ad=ad/50; OLED_Clear(); temp=ad*(3.3/4095); temp1=ad*(3.3/4095); temp1=(temp1-temp)*1000; OLED_ShowString(0,1,"ad ="); OLED_ShowString(0,3,"U = . V"); OLED_ShowNum(30,1,ad,4,16); OLED_ShowNum(50,3,temp1,3,16); OLED_ShowNum(20,3,temp,2,16); OLED_ShowString(20,5,"2017.07.03"); delay_ms(1000); delay_ms(1000); delay_ms(1000); OLED_Clear(); OLED_ShowString(0,1,"da ="); OLED_ShowNum(30,1,da,4,16); delay_ms(1000); delay_ms(1000); delay_ms(1000); while(1)//死循环 { if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)==Bit_RESET) { n++; da=n*49; DAC_SetChannel1Data(DAC_Align_12b_R,da); printf("da=%f v\r\n",3.3*(da/4095)); OLED_ShowString(0,1,"da ="); OLED_ShowNum(30,1,da,4,16); OLED_ShowString(0,3,"Voutda ="); OLED_ShowNum(60,3,3.3*(da/4095),4,16); delay_ms(500); if (da>4095) { n=0,da=0; } } else if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1)==Bit_RESET) { n--; da=n*49; DAC_SetChannel1Data(DAC_Align_12b_R,da); printf("da=%f v\r\n",3.3*(da/4095)); OLED_ShowString(0,1,"da ="); OLED_ShowNum(30,1,da,4,16); OLED_ShowString(0,3,"Voutda ="); OLED_ShowNum(60,3,3.3*(da/4095),4,16); delay_ms(500); if (da<0) { n=0,da=0; } }}}
阅读全文
0 0
- STM32程序移植的一些注意方法
- stm32的一些简单注意点
- STM32程序跳转需要注意的问题
- STM32库内程序一些好的编程思路、方法及好的程序
- ABAP程序的移植性注意问题
- 关于STM32在实现IAP时的一些注意
- STM32中一些需要注意的小问题
- stm32 移植cJson 注意free释放内存!!
- stm32 移植cJson 注意free释放内存!!
- 注意调试程序的方法
- STM32的ucos移植
- 高效可移植程序的一些习惯
- 高效可移植程序的一些习惯
- STM32 注意的地方
- STM32 注意的地方
- STM32 注意的地方
- STM32的USART注意
- miniGUI移植要注意的一些问题 (转)
- FreeRTOS在STM32F405RGT6的移植
- POJ-3061 尺取
- Phoenix系列:原子的Upsert
- Elasticsearch概述、ES概念、什么是搜索、全文检索、Elasticsearch功能(来自网络+学习资料)
- 洛谷P2969 音符
- STM32程序移植的一些注意方法
- python 用open打开文件的经验
- 创建型模型 (一)整理
- poj3080 Blue Jeans(后缀数组+二分答案)
- OpenCV之颜色空间转换:cvtColor()函数
- 第十八篇 ANDROID的声音管理系统及服务
- 1001. A+B Format (20)
- 492. Construct the Rectangle
- 将三个数按从大到小输出