(个人杂记)第十四章 PWM输出实验

知识回顾

重映射:将内置外设的输入输出端口改变到其他端口,也就不是上一次使用的端口复用

在本章中,我们将使用TIM3的通道2,把通道2重映射到PB5,产生PWM来控制DSO的亮度。
(STM32F1开发指南)P211

查表如下:
在这里插入图片描述
使用端口重映射的原因:

我们要利用TIM3的CH2输出PWM来控制DSO的亮度,但是TIM3_ CH2默认是接在PA7上面的,
而我们的DS0接在PB5上面,如果普通MCU,可能就只能用飞线把PA7飞到PB5上来实现了,
不过,我们用的是STM32,它比较高级,可以通过重映射功能,把TIM3_ CH2映射到PB5上
(STM32F1开发指南)P213

LED灯的最大值可以设置到899
我们可以通过定时器重映射到LED的端口,然后通过定时器产生的脉冲宽度PWM来控制LED的亮度


自主设计案例

  1. 串口通信。0xC5是通信头+命令一个字节+参数长度+参数n
  2. 接收到指令后返回指令。Ack_Rec();
  3. 0xAA:LED1灯亮n次,然后打印:“已经亮了N次了”
  4. 0xBB:LED0灯的亮度变化,n(亮度值的指定),如果大于原先的亮度值,端口打印:“变亮”,反之,端口打印:“变暗”,没变化就:“没变化”
  5. 0xCC:熄灭两个LED灯

灯闪范围:范围是0x00 ~ 0x99 = 0~153,超过次数就错误
TIM3定时器复用了LED0的IO接口,所以不能正常LED操作

if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
		Res =USART_ReceiveData(USART1);	//读取接收到的数据
		

		if((USART_RX_STA&0x8000)==0)
		{
   	

			if(USART_RX_STA>2)//5
			{
   
				USART_RX_BUF[USART_RX_STA&0X3FFF]=Res;			
				USART_RX_STA++;//3固定的
				if(USART_RX_STA>6){
   
					USART_RX_STA=0;
				}
				
				if(USART_RX_STA==Para_len+5)//1+3(参数位+固定3个字节) 判断是否接收完
				{
   
					USART_RX_STA|=
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值