概述
1.启用assert_param
启用assert_param需要在Options for Target 里面C/C++ 里面define USE_FULL_ASSERT 然后在main.c文件里加入assert_failed函数即可。
void assert_failed(uint8_t* file, uint32_t line)
{
/* User can add his own implementation to report the file name and linenumber,
ex: printf("Wrong parameters value: file %s on line %drn", file,line) */
/* Infinite loop */
printf("Wrong parameters value: file %s on line %drn", file,line);
while(1){}
}
2.LCD格式化输出字符串
勘误:此处建议用snprintf,函数sprintf可能会越界(debug发现的,搞了半天,蛋疼!)
sprintf( text,"%-20s",USART2_DATA.RX_BUF);//左对齐补空格
LCD_DisplayStringLine(Line9, (u8*)text);
3.TIM 时钟 分频
CK_CNT(定时器时钟)等于fCK_PSC/(PSC[15:0]+1)
即配置TIMx_PSC为0时是不分频。
在向上计数模式中,计数器从0计数到自动加载值(TIMx_ARR计数器的内容),然后重新从0开始计数并且产生一个计数器溢出事件。
若设置TIMx_ARR为99 则 计数器寄存器(TIMx_CNT) 会从0加到99再从0加到99如此循环,一共有100个数字;
3.1.产生PWM波形
下面是一个PWM模式1的例子。当TIMx_CNT<TIMx_CCRx时PWM信号参考OCxREF为高,否则为低。如果TIMx_CCRx中的比较值大于自动重装载值(TIMx_ARR),则OCxREF保持为’1’。如果比较值为0,则OCxREF保持为’0’。 下图为TIMx_ARR=8时边沿对齐的PWM波形实例。
图128 边沿对齐的PWM波形(ARR=8)
可以看出若TIM定时器的TIMx_ARR设置为99,则TIMx_CNT可以从0变化到99,共100个数值,而TIMx_CCRx可以从0变化到100共101个数值(详细理解看图128)。
3.2.PWM输入捕获
图126 PWM输入模式时序
由TIMx_CCR1和TIMx_CCR2的数据即可计算占空比和频率,需要注意的是,TIMx_CCRx采集到的是TIMx_CNT上一次的数值。
TIM_ICInitStructrue.TIM_ICPrescaler = TIM_ICPSC_DIV1;里面的分频似乎没有用。
4.AFIO时钟的开启
https://blog.csdn.net/u013082827/article/details/77543394
5.比较输出的时候将引脚设置为特定的高低电平(例 TIM3_CH1_PA6)
设置特定电平(不推荐本方法)
1.关闭对应的中断。//TIM_ITConfig(TIM3, TIM_IT_CC1, DISABLE);
2.关闭对应的引脚使能。//TIM_CCxCmd(TIM3, TIM_Channel_1, TIM_CCx_Disable);
3.设置GPIO为输出,并设置电平
GPIO_InitTypeDef GPIO_InitStructure;
TIM_ITConfig(TIM3, TIM_IT_CC1, DISABLE);
TIM_CCxCmd(TIM3, TIM_Channel_1, TIM_CCx_Disable);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIOA->BSRR = GPIO_Pin_6;
恢复PWM输出
1.设置GPIO
2.使能引脚
3.打开中断
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
TIM_CCxCmd(TIM3, TIM_Channel_1, TIM_CCx_Enable);
TIM_ITConfig(TIM3, TIM_IT_CC1, ENABLE);
不推荐上面的方法建议使用以下方法:
直接调用 TIM_ForcedOCxConfig 函数 强制电平是类似于 OC 的一种 Mode。
当需要恢复的时候重新 TIM_OCxInit 一下即可输出PWM。
蓝桥的其他文章与我个人敲的代码
桥杯嵌入式 错题本
蓝桥杯嵌入式国赛扩展板 CT117E-EX 学习
省赛及国赛的赛题的实现代码可以在我的下载里面找到
最后
以上就是苹果板凳为你收集整理的蓝桥杯嵌入式STM32 零碎笔记蓝桥的其他文章与我个人敲的代码的全部内容,希望文章能够帮你解决蓝桥杯嵌入式STM32 零碎笔记蓝桥的其他文章与我个人敲的代码所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复