历史上的今天
今天是:2024年10月16日(星期三)
2019年10月16日 | STM32学习【2】STM32F103C8T6串口2USART2程序
2019-10-16 来源:eefocus
STM32F103C8T6串口1(PA10/RXD1,PA9/TXD1)用来烧写程序,串口2(PA3/RXD2,PA2/TXD2)接串口模块与电脑串口助手通信。IO口PA1接LED+470R电阻+D3V3。
调试后,能正常运行的程序如下:
#include "stm32f10x.h"
#include "stm32f10x_usart.h"
#define LED_ON GPIO_ResetBits(GPIOA ,GPIO_Pin_1)
#define LED_OFF GPIO_SetBits(GPIOA ,GPIO_Pin_1)
void GPIO_Config(void);
void USART2_Config(void);
void RCC_Config(void);
void Delay(u32 nCount)
{
for(; nCount != 0; nCount--);
}
int main(void)
{
RCC_Config(); //时钟设置
GPIO_Config();
USART2_Config();
while(1)
{
LED_OFF;
Delay(0xfffff);
Delay(0xfffff);
Delay(0xfffff);
Delay(0xfffff);
Delay(0xfffff);
Delay(0xfffff);
USART_SendData(USART2,0x12);
LED_ON;
Delay(0xfffff);
Delay(0xfffff);
Delay(0xfffff);
Delay(0xfffff);
Delay(0xfffff);
Delay(0xfffff);
}
}
void RCC_Config(void)
{
/*开启外设时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
}
void GPIO_Config(void){
GPIO_InitTypeDef GPIO_InitStructure; //定义一个结构体变量
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化库函数
//PA2 TXD2
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//PA3 RXD2
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void USART2_Config(void)
{
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART2, &USART_InitStructure);
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); //开启接收中断
USART_ITConfig(USART2, USART_IT_TXE, ENABLE); //开启发送中断
USART_Cmd(USART2, ENABLE);
}
程序编写过程中出现的问题:
1、时钟设置函数void RCC_Config(void)中
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
若写成
RCC_APB2PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
程序编译能够通过,但烧写后,程序无法正常运行。
2、若没有配置串口USART2(PA3/RXD2,PA2/TXD2)对应IO口的输入输出模式,编译能够通过,但程序无法正常运行。
PA2/TXD2应配置为
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
PA3/RXD2应配置为
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
以上问题的具体解释都可以在STM32固件函数库用户手册找到。
APB1时钟设置

GPIO模式时钟设置
史海拾趣
|
RT-Thread MIPS分支连载:MIPS体现结构的历史 MIPS体系结构(Microprocessor without interlocked piped stages) MIPS技术公司是一家设计制造高性能、高档次及嵌入式32位和64位处理器的厂商,在RISC处理器方面占有重要地位。1984年,MIPS计算机公司成立。1992年,SGI收购了MIPS计算机公 ...… 查看全部问答> |
|
TI的M3在4G的寻址空间是不是在某一地址位置FLASH和SRAM的容量是1byte(手册上说的多少kB是指kbytes?),而寄存器是32位(4byte)的?… 查看全部问答> |
|
编译时一直出现line 25: fatal error: could not open source file \"DSP281x_Device.h\"怎么回事啊,我明显已经有DSP281x_Device.h文件啊,急求高手给提供一条解决方法!… 查看全部问答> |
|
EEWORLD大学堂----使用Atmel Studio 6进行系统内编程 使用Atmel Studio 6进行系统内编程:https://training.eeworld.com.cn/course/450介绍在Atmel Studio 6中进行系统内编程。视频中将通过一个案例项目手把手教你一些关键步骤。… 查看全部问答> |
|
代码: /*参考电压为:V+=Vref+,V-=Vss * 采样和保持时间8个ADC10CLK周期 * 采样率设为50ksps * 参考源只有在采样和转换时开启(降低功耗)!!!!!可是每次转换开启参考源,不如就一直开启吧╮(╯▽╰)╭ * 触发管脚SHI信号(此处使用 ...… 查看全部问答> |




