知识回顾
重映射:将内置外设的输入输出端口改变到其他端口,也就不是上一次使用的端口复用
在本章中,我们将使用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的亮度
自主设计案例
- 串口通信。0xC5是通信头+命令一个字节+参数长度+参数n
- 接收到指令后返回指令。Ack_Rec();
- 0xAA:LED1灯亮n次,然后打印:“已经亮了N次了”
- 0xBB:LED0灯的亮度变化,n(亮度值的指定),如果大于原先的亮度值,端口打印:“变亮”,反之,端口打印:“变暗”,没变化就:“没变化”
- 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|=