stm32f10x串口实验之中断模式-创新互联
1、在使用一个内置外设的时候,我们首先要使能相应的 GPIO 时钟,然后使能复用功能时
创新互联长期为近1000家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为齐齐哈尔企业提供专业的成都做网站、网站建设,齐齐哈尔网站改版等技术服务。拥有10多年丰富建站经验和众多成功案例,为您定制开发。钟和内置外设时钟。注意设置时,要使能三个,一个gpio,一个usart,还有一个复用功能;
2、gpio的端口模式设定:
3、中断相应函数的名字是不能随便定义的,一般我们都遵循 MDK
定义的函数名。这些函数名字在启动文件 startup_stm32f10x_hd.s 文件中可以找到
4、串口设置的一般步骤可以总结为如下几个步骤:
1) 串口时钟使能, GPIO 时钟使能
2) 串口复位 一般在系统刚开始配置外设的时候,都会先执行复位该外设的操作(DeInit(函数))
3) GPIO 端口模式设置
4) 串口参数初始化
5) 开启中断并且初始化 NVIC(如果需要开启中断才需要这个步骤)
6) 使能串口
7) 编写中断处理函数
5、STM32 的发送与接收是通过数据寄存器 USART_DR 来实现的,这是
一个双寄存器,包含了 TDR 和 RDR。当向该寄存器写数据的时候,串口就会自动发送,当收
到数据的时候,也是存在该寄存器内。
6、串口的状态可以通过状态寄存器 USART_SR 读取。通过读(即为receive函数) USART_DR 可以将
该位清零,也可以向该位写 0,直接清除。
7、因为我们使用到了串口的中断接收,必须在 usart.h 里面设置
EN_USART1_RX 为 1(默认设置就是 1 的) 。该函数才会配置中断使能,以及开启串口 1 的
NVIC 中断。这里我们把串口 1 中断放在组 2,优先级设置为组 2 里面的最低。NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 设 置 NVIC 中 断 分 组 2
8、 IO 口复用的,信号在逻辑分析窗口是不能显示出来的(看不到波形),
自己实现的代码如下:
m_usart.c文件:
#include "m_usart.h" #include "sys.h" void GPIO_config(void) { GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1 | RCC_APB2Periph_AFIO ,ENABLE); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA,&GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA,&GPIO_InitStruct); } void NVIC_config() { NVIC_InitTypeDef NVIC_InitStruct; NVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 2; NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2; NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStruct); } void USART_config() { USART_InitTypeDef USART_InitStruct; USART_DeInit(USART1); USART_InitStruct.USART_BaudRate = 115200; USART_InitStruct.USART_WordLength = USART_WordLength_8b; USART_InitStruct.USART_StopBits = USART_StopBits_1; USART_InitStruct.USART_Parity = USART_Parity_No ; USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_Init(USART1,&USART_InitStruct); USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); //Dê1ü£ USART_Cmd(USART1,ENABLE); //′úê1ü£ } void init_usart1(void) { GPIO_config(); NVIC_config(); USART_config(); }
主函数中的中断服务程序:
void USART1_IRQHandler(void)
{
if((USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)) //判断中断状态;
{
if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE) != RESET) //注意,这里是判断串口状态;
{
r_data = USART_ReceiveData(USART1);
USART_SendData(USART1,r_data);
}
}
USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除中断标志位;
}
好了,今天收获不是很多,好好的,第二天加油!
弟子规第二天:
父母呼 应勿缓 父母命 行勿懒
父母教 须敬听 父母责 须顺承
冬则温 夏则凊 晨则省 昏则定
出必告 反必面 居有常 业无变
百事孝为先!
必须孝敬父母,尊重长辈,与君共勉!
今天我也进行了爱心捐款,我做了一件好事,自己的正能量满满,加油,我会越来越好的!
加油!
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
网站栏目:stm32f10x串口实验之中断模式-创新互联
本文网址:http://scyanting.com/article/cechdo.html