① stm32怎么设置端口
最佳答案GPIOC-.CRH&=0XFFF00FFF;//清掉这2个位原来的设置,同时也不影响其它位的设置 GPIOC-CRH|=0X00038000;//PC11输入,PC12输出 ; 就是按位与和按位或,...
② STM32如何重置PWM端口
最简单的方法,检测到按键按下之后,初始化PWM的定时器,输出PWM;检测到按键松开后,反初始化PWM定时器,设置PWM的IO输出0.
voidPwmStart(void)
{
TIM3_GPIO_Config();
TIM3_Mode_Config(200);//占空比0.4设置了TIM3_Mode_Config(inti)
/*开启TIM3*/
TIM_Cmd(TIM3,ENABLE);
}
voidPwmStop(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
TIM_Cmd(TIM3,DISABLE);
TIM_DeInit(TIM3);
//GPIO配置,把PWM的IO配置为输出,然后输出0.
GPIO_InitStructure.GPIO_Pin=PWM_PIN;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOx,&GPIO_InitStructure);
GPIO_ResetBit(GPIOx,PWM_PIN);
}
intmain(void)
{
intnKeyState=-1;
...
while(1)
{
KEY=ReadKeyDown();
if(nKeyState!=KEY)
{
nKeyState=KEY;
if(KEY==1)
{
PwmStart();
}
else
{
PwmStop();
}
}
}
}
③ STM32H750 U盘端口设置
此开发板基于STM32STM32H750VBT6核心,可用于H7系列微处理器的评估、学习和开发等用途,板载ST-Link V2.1,调试、串口、U盘式下载三合一。
a. 板载资源明细
STM32H750VBT6高性能ARM微处理器
用作ST-Link功能的STM32F103CBT6微处理器
一个RGB共阳LED灯
16Mbit的QSPI-Flash,可自行更改为兼容的NOR-Flash以实现xIP功能
Micro-SD卡接口
一个LCD接口,可用于驱动专用于ArinoMega2560的3.2寸LCD(选择这个而不是其他的屏幕是因为这个屏幕非常便宜而且显示效果很好),LCD驱动型号:ILT9481
一个LM358运放,用来提高DAC输出的能力,可在5V供电下正常使用
一个超级电容作为RTC后备电源
micro-USB接口,带自恢复保险丝
可通过跳线帽设置LPUART1是否接入板载ST-LINK(左侧丝印SERIAL的排针,1~2,3~4通过跳线帽短接即可接入)
因为端口复用的原因,原理图中存在一根导线归属多个网络的情况。但在转为PCB时,会随机保留一个网络。这会导致原理图和PCB的网络数目不相同。此情况不影响正常编辑和使用。 使用前请先通过另一个ST-Link为板载STM32F103CB刷写ST-LinkV2.1的Booloader,刷写后通过USB连接开发板,使用ST-Link Utilities更新固件后即可正常使用板载ST-Link的全部功能。
④ stm32串口5怎么配置
STM32串口配置的一般步骤(库函数)
(1)串口时钟使能:RCC_APBxPeriphClockCmd();
GPIO时钟使能:RCC_AHBxPeriphClockCmd();
(2)引脚复用映射:GPIO_PinAFConfig();
(3)GPIO端口模式配置:GPIO_Init(); 模式配置为GPIO_Mode_AF
(4)串口参数初始化:USART_Init();
(5)开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)
NVIC_Init();
USART_ITConfig();
(6)使能串口:USART_Cmd();
(7)编写中断处理函数:USARTx_IRQHandler();
(8)串口数据收发:
void USART_SendData();//发送数据到串口,DR
uint16_t USART_ReceiveData();//接收数据,从DR读取接收的数据
(9)串口传输状态获取:
FlagStatus USART_GetFlagStatus();
void USART_ClearITPendingBit();更加详细的可以在闯客网技术论坛进行查看的。
范例代码:
#include"stm32f4xx.h"
#include"usart.h"
/*中断服务函数*/
voidUSART1_IRQHandler(void)
{
uint16_trecv;
if(USART_GetFlagStatus(USART1,USART_IT_RXNE))
{
recv=USART_ReceiveData(USART1);
USART_SendData(USART1,recv);
}
}
voidUsart1_Demo_Init(void)
{
GPIO_InitTypeDefGPIOA_InitStruct;
USART_InitTypeDefUSART1_InitStruct;
NVIC_InitTypeDefNVIC_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);/*使能USART1时钟*/
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);/*使能GPIOA的时钟*/
/*将PA9和PA10映射到串口1*/
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
/*设置GPIO端口模式*/
GPIOA_InitStruct.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10;
GPIOA_InitStruct.GPIO_Mode=GPIO_Mode_AF;
GPIOA_InitStruct.GPIO_OType=GPIO_OType_PP;
GPIOA_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;
GPIOA_InitStruct.GPIO_Speed=GPIO_Speed_100MHz;
GPIO_Init(GPIOA,&GPIOA_InitStruct);
/*串口参数初始化*/
USART1_InitStruct.USART_BaudRate=115200;
USART1_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART1_InitStruct.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
USART1_InitStruct.USART_Parity=USART_Parity_No;
USART1_InitStruct.USART_StopBits=USART_StopBits_1;
USART1_InitStruct.USART_WordLength=USART_WordLength_8b;
USART_Init(USART1,&USART1_InitStruct);
/*使能USART1*/
USART_Cmd(USART1,ENABLE);
/*使能串口使用的中断*/
NVIC_InitStruct.NVIC_IRQChannel=USART1_IRQn;
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;
NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;
NVIC_Init(&NVIC_InitStruct);
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
}
intmain(void)
{
/*设置中断分组*/
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
Usart1_Demo_Init();
while(1);
}
⑤ 关于stm32端口的输入输出模式配置的问题
你看看你读出来的数据是有规律的还是每次都不一样,或者是不是前一次写入的数据。
一般都是需要,切换GPIO的方向的。我记得stm32的io口有复用推挽输出。
⑥ 如何使用stm32的spi3端口
voidSPI3_Init(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
SPI_InitTypeDefSPI_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
//SPI_FLASH_SPIpins:SCK--PB3
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_Init(GPIOB,&GPIO_InitStructure);
//SPI_FLASH_SPIpins:MISO--PB4
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;
GPIO_Init(GPIOB,&GPIO_InitStructure);
//SPI_FLASH_SPIpins:MOSI--PB5
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
GPIO_Init(GPIOB,&GPIO_InitStructure);
//SPI_FLASH_SPI_CS_PINpin:CS--PA15
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;//设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工
SPI_InitStructure.SPI_Mode=SPI_Mode_Master; //设置SPI工作模式:设置为主SPI
SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b; //设置SPI的数据大小:SPI发送接收8位帧结构
SPI_InitStructure.SPI_CPOL=SPI_CPOL_High; //选择了串行时钟的稳态:时钟悬空高
SPI_InitStructure.SPI_CPHA=SPI_CPHA_2Edge; //数据捕获于第二个时钟沿
SPI_InitStructure.SPI_NSS=SPI_NSS_Soft; //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制
SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_16; //定义波特率预分频的值:波特率预分频值为16
SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB; //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始
SPI_InitStructure.SPI_CRCPolynomial=7; //CRC值计算的多项式
SPI_Init(SPI3,&SPI_InitStructure);//根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器
SPI_Cmd(SPI3,ENABLE);//使能SPI外设
}
⑦ STM8S103单片机PD4口,无论设为‘0’还是‘1’,都是输出为‘1’,急求助!
端口初始化:
PD_DDR = 0XFF; //输出模式
PD_CR1 = 0XFF; //上拉
PD_CR2 = 0X00;
然后输出高电平操作:PD_ODR = 0XFF;
输出低电平操作:PD_ODR = 0X00;
这样操作如还是高不低,则排除硬件原因之后就是芯片的问题了。