蓝桥杯嵌入式STM32 零碎笔记

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 %d\r\n", file,line) */ 
	/* Infinite loop */
	printf("Wrong parameters value: file %s on line %d\r\n", file,line); 
	while(1){} 
}

 

2.LCD格式化输出字符串

勘误:此处建议用snprintf函数sprintf可能会越界

			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

图128 边沿对齐的PWM波形(ARR=8)

蓝桥杯嵌入式STM32 零碎笔记_第1张图片

 

 可以看出若TIM定时器的TIMx_ARR设置为99,则TIMx_CNT可以从0变化到99,共100个数值,而TIMx_CCRx可以从0变化到100共101个数值(详细理解看图128)。

 

3.2.PWM输入捕获

图126 PWM输入模式时序 

蓝桥杯嵌入式STM32 零碎笔记_第2张图片

由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

 蓝桥杯嵌入式STM32 零碎笔记_第3张图片

 

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 学习

省赛及国赛的赛题的实现代码可以在我的下载里面找到

你可能感兴趣的:(C,蓝桥杯,误区,STM32)