麻烦 connecting/configuring STM32F072RBT6 上的 USART
Trouble connecting/configuring USART on STM32F072RBT6
我正在尝试将我的 STM32F072RBT6 模块连接到 pc 并通过 USART 发送数据。我对此很陌生,我不明白一些事情。不幸的是,该模块没有可用的示例。我用usb线连接stm和pc。这是我的代码:
GPIO_InitTypeDef GPIO_InitStruct;
USART_InitTypeDef USART_InitStructure;
void send_char(char c)
{
while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
USART_SendData(USART2, c);
}
void send_string(const char* s)
{
while (*s)
send_char(*s++);
}
GPIO_InitTypeDef GPIO_InitStruct;
USART_InitTypeDef USART_InitStructure;
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
GPIO_StructInit(&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_Init(GPIOA, &GPIO_InitStruct);
//GPIO_PinAFConfig(GPIOA, GPIO_PinSource2,GPIO_AF_1); //tried this too
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
//GPIO_PinAFConfig(GPIOA, GPIO_PinSource3,GPIO_AF_1);
我读到Rx pin需要配置为浮动输入,但是没有
模式这样设置。我还尝试使用 GPIO_Mode_AF 并评论了 PinAFConfig。
GPIO_Init(GPIOA, &GPIO_InitStruct);
USART_StructInit(&USART_InitStructure);
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
USART_InitStructure.USART_Parity=USART_Parity_No;
USART_InitStructure.USART_StopBits=USART_StopBits_1;
USART_InitStructure.USART_WordLength=USART_WordLength_8b;
USART_Init(USART2, &USART_InitStructure);
USART_Cmd(USART2, ENABLE);
while (1) {
send_string("Hello world!\r\n");
}
}
我正在尝试在 teraterm 中查看任何结果。我注意到,当我不小心触摸到 pin od board 时,终端上出现了一些字符。这是连接有效但我配置错误的标志吗?
我也尝试用 USART1 和它的引脚来做这个,但什么也没发生。你能
有例子
例如在 STM32CubeF0 下 Projects/STM32F072RB-Nucleo/Examples/UART
虽然他们使用的是USART1,所以你得稍微调整一下。
如果没有例子
那么您可以使用 STM32CubeMX 简单地生成一个。用你的 MCU 启动一个项目,点击 USART2 旁边的三角形(左边),select Mode Asynchronous,然后使用 Project / Generate Code,就可以了。
我正在尝试将我的 STM32F072RBT6 模块连接到 pc 并通过 USART 发送数据。我对此很陌生,我不明白一些事情。不幸的是,该模块没有可用的示例。我用usb线连接stm和pc。这是我的代码:
GPIO_InitTypeDef GPIO_InitStruct;
USART_InitTypeDef USART_InitStructure;
void send_char(char c)
{
while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
USART_SendData(USART2, c);
}
void send_string(const char* s)
{
while (*s)
send_char(*s++);
}
GPIO_InitTypeDef GPIO_InitStruct;
USART_InitTypeDef USART_InitStructure;
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
GPIO_StructInit(&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_Init(GPIOA, &GPIO_InitStruct);
//GPIO_PinAFConfig(GPIOA, GPIO_PinSource2,GPIO_AF_1); //tried this too
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
//GPIO_PinAFConfig(GPIOA, GPIO_PinSource3,GPIO_AF_1);
我读到Rx pin需要配置为浮动输入,但是没有 模式这样设置。我还尝试使用 GPIO_Mode_AF 并评论了 PinAFConfig。
GPIO_Init(GPIOA, &GPIO_InitStruct);
USART_StructInit(&USART_InitStructure);
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
USART_InitStructure.USART_Parity=USART_Parity_No;
USART_InitStructure.USART_StopBits=USART_StopBits_1;
USART_InitStructure.USART_WordLength=USART_WordLength_8b;
USART_Init(USART2, &USART_InitStructure);
USART_Cmd(USART2, ENABLE);
while (1) {
send_string("Hello world!\r\n");
}
}
我正在尝试在 teraterm 中查看任何结果。我注意到,当我不小心触摸到 pin od board 时,终端上出现了一些字符。这是连接有效但我配置错误的标志吗? 我也尝试用 USART1 和它的引脚来做这个,但什么也没发生。你能
有例子
例如在 STM32CubeF0 下 Projects/STM32F072RB-Nucleo/Examples/UART
虽然他们使用的是USART1,所以你得稍微调整一下。
如果没有例子
那么您可以使用 STM32CubeMX 简单地生成一个。用你的 MCU 启动一个项目,点击 USART2 旁边的三角形(左边),select Mode Asynchronous,然后使用 Project / Generate Code,就可以了。