关于STM32的USART配置,需要完成以下几个步骤
1,打开USART时钟
2,配置PA9及PA10
由于USART属于可选功能项
所以TX要设置成GPIO_Mode_AF_PP;,即复用推挽输出
RX用于数据输入,被设置成浮空输入
这是由于STM32的IO口引脚总共只有以下几种模式
GPIO_Mode_AIN = 0x0,
GPIO_Mode_IN_FLOATING = 0x04,
GPIO_Mode_IPD = 0x28,
GPIO_Mode_IPU = 0x48,
GPIO_Mode_Out_OD = 0x14,
GPIO_Mode_Out_PP = 0x10,
GPIO_Mode_AF_OD = 0x1C,
GPIO_Mode_AF_PP = 0x18
对于特殊功能模式,只有一个复用开漏及复用推挽。
这两种都是用于输出的情况。
所以RX只能被设置成浮空输入
这不仅是USART,对于其他的如SPI也是如此。
//创建一个串口通讯 SerialPort CurrentPort = null; CurrentPort = new SerialPort(); CurrentPort.ReadBufferSize = 128; CurrentPort.PortName = comName; //端口号 CurrentPort.BaudRate = bandRate; //比特率 CurrentPort.Parity =parity;
[img]STM32有很多的内置外设,这些外设的外部引脚都是与GPIO复用的。也就是说,一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫做复用。
简单易懂的说,就是某些普通的外设引脚也可以用来其它功能。比如说串口1 的发送接收引脚是PA9,PA10,当我们把PA9,PA10不用作普通的GPIO口,而用做复用功能串口1的发送接收引脚的时候,叫端口复用。
我们知道每个内置外设都有若干个输入输出引脚,一般这些引脚的输出脚位都是固定不变的,为了让设计工程师可以更好地安排引脚的走向和功能,在STM32中引入了外设引脚重映射的概念,即一个外设的引脚除了具有默认的脚位外,还可以通过设置重映射寄存器的方式,把这个外设的引脚映射到其它的脚位。
STM32的端口重映射有三种模式:
以TIM3为例,没有重映射就是使用复用端口引脚,如下图,没有重映射4个输出通道引脚分别是在PA6、PA7、PB0、PB1;部分重映射,从字面上理解就是只改变一部分输出或输入引脚的端口,部分重映射后,TIM3的通道1和通道2从原先的PA6、PA7引脚改变到PB4、PB5了,而通道3、通道4还是在PB0、PB1保持不变;完全重映射,引脚全部改变了,通道1到通道4从原先的PA6、PA7、PB0、PB1变为PC6~PC9。
还是以TIM3为例
FFT算法,需要你自己做了,网上有现成的例子。
你要做的是:配置好ADC采用通道;
再根据需要配置一个定时器触发ADC采样通道,读取数据存到缓存中;
根据缓存中的数据做FFT算法;
主要问题是:这个定时器设置的周期需要你自己决定,因为多久做一次FFT,需要多少采样数据都是你来决定的
脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制。
STM32 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出。其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。而通用定时器也能同时产生多达 4路的 PWM 输出,这样,STM32 最多可以同时产生 30 路 PWM 输出!这里我们仅利用 TIM3的 CH2 产生一路 PWM 输出。
PWM 相关的函数设置在库函数文件 stm32f10x_tim.h 和 stm32f10x_tim.c文件中。
TIM3_CH2 默认是接在 PA7上面的,而我们的 LED0 接在 PB5 上面,如果普通 MCU,可能就只能用飞线把 PA7 飞到 PB5上来实现了,不过,我们用的是 STM32,它比较高级,可以通过重映射功能,把 TIM3_CH2映射到 PB5 上。
STM32函数库对TIM3重映射有两种方法,一种是完全重映射GPIO_FullRemap_TIM3,这个比较好理解就是把TIM3的所有通道端口映射到Remap指定的端口上;还有一种是部分映射GPIO_PartialRemap_TIM3。
在库函数中,PWM 通道设置是通过函数 TIM_OC1Init()~TIM_OC4Init()来设置的,不同的通道的设置函数不一样,这里我们使用的是通道 2,所以使用的函数是 TIM_OC2Init()。
总结:PWM模式1下,TIMx_CCR1大时有效;PWM模式2下,TIMx_CCR1小有效。
有效电平的高低取决于TIM_OCPolarity的定义。本例子情况如下图:
至此,PWM初始化结束。
PA567全部用AF_PP方式。
另外,SPI_I2S_SendData函数在使用之前需要先检查状态,检查是否发送完成:
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
SPI_I2S_SendData(SPI1,data);
如果你认为麻烦,可以使用下面的函数来收发一个字节,比上面的简单。
uint8_t SPI_X_Byte(uint8_t byte)
{
while(!(SPIX-SRSPI_I2S_FLAG_TXE));
SPIX-DR=byte;
while(!(SPIX-SRSPI_I2S_FLAG_RXNE));
return SPIX-DR;
}
关于STM32F407PA5,PA6,PA7和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。