启用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){}
}
勘误:此处建议用snprintf函数sprintf可能会越界
sprintf( text,"%-20s",USART2_DATA.RX_BUF);//左对齐补空格
LCD_DisplayStringLine(Line9, (u8*)text);
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个数字;
可以看出若TIM定时器的TIMx_ARR设置为99,则TIMx_CNT可以从0变化到99,共100个数值,而TIMx_CCRx可以从0变化到100共101个数值(详细理解看图128)。
图126 PWM输入模式时序
由TIMx_CCR1和TIMx_CCR2的数据即可计算占空比和频率,需要注意的是,TIMx_CCRx采集到的是TIMx_CNT上一次的数值。
TIM_ICInitStructrue.TIM_ICPrescaler = TIM_ICPSC_DIV1;里面的分频似乎没有用。
https://blog.csdn.net/u013082827/article/details/77543394
设置特定电平
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 学习
省赛及国赛的赛题的实现代码可以在我的下载里面找到