蓝桥杯嵌入式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可能会越界(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 学习

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

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值