新手上路
- 积分
- 38
- 金钱
- 38
- 注册时间
- 2016-7-20
- 在线时间
- 6 小时
|
1金钱
本帖最后由 feichan61 于 2016-7-23 18:22 编辑
首先我自己写了个程序不行,经过不断对照检查,发现好像是USART1_IPQHandler这里出了错,但没有编译和联接错误
然后将原子哥的这一段程序带进去没错,可以运行,功能可以实现,但返回去又不行。。。。。。
最后我自己重新又一模一样打了一遍又可以了。。。。。。
不知道出了什么问题
#include "stm32f10x.h"
#include "delay.h"
void My_usart_init()
{
/*定义一些结构体变量 gpio 串口的 和 中断的*/
GPIO_InitTypeDef GPIO_IO;
USART_InitTypeDef USART_IO;
NVIC_InitTypeDef NVIC_IO;
/***************①使能串口、端口时钟******************************************************/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//①
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); //************************************************************8
//*****************②GPIO口端口的设置****************************************
GPIO_IO.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_IO.GPIO_Pin=GPIO_Pin_9;
GPIO_IO.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(GPIOA,&GPIO_IO);
GPIO_IO.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_IO.GPIO_Pin=GPIO_Pin_10;
GPIO_Init(GPIOA,&GPIO_IO);
//****************③串口初始化************************************
USART_IO.USART_BaudRate=9600;//设置波特率
USART_IO.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//硬件流控制是使能还是失能
//USART_HardwareFlowControl_None 硬件流失能
USART_IO.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;//USART_Mode_Tx发送使能 USART_Mode_Rx 接收使能
USART_IO.USART_Parity=USART_Parity_No;//设置奇偶模式
//USART_Parity_NO 奇偶失能 USART_Parity_Enven 偶使能 USART_Parity_Odd 奇模式
USART_IO.USART_WordLength=USART_WordLength_8b;//设置字节长度
USART_IO.USART_StopBits=USART_StopBits_1;//设置发送停止的数目
USART_Init(USART1,&USART_IO);
USART_Cmd(USART1,ENABLE);
//************⑤开机中断和初始化NVIC******************
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//开启接收中断
//*****************中断优先级的设立*********************************
NVIC_IO.NVIC_IRQChannel=USART1_IRQn;//使能或者失能指定的IRQ通道
NVIC_IO.NVIC_IRQChannelCmd=ENABLE;//
NVIC_IO.NVIC_IRQChannelPreemptionPriority=1;//成员NVIC_IRQChannel占得优先级
NVIC_IO.NVIC_IRQChannelSubPriority=1;//NVIC_IO.NVIC_IRQChannel从优先级
NVIC_Init(&NVIC_IO);
}
void USART1_IPQHandler()
{
u8 test;
if(USART_GetITStatus(USART1,USART_IT_RXNE))
{
test=USART_ReceiveData(USART1);
USART_SendData(USART1,test);
}
}//自己第一遍写的
//void USART1_IRQHandler(void)
//{
// u8 res;
// if(USART_GetITStatus(USART1,USART_IT_RXNE))
// {
// res= USART_ReceiveData(USART1);
// USART_SendData(USART1,res);
// }
//} //原子哥的
//void USART1_IRQHandler()
//{
// u8 test;
// if(USART_GetITStatus(USART1,USART_IT_RXNE))
// {
// test=USART_ReceiveData(USART1);
// USART_SendData(USART1,test);
// }
//} //重打的
int main()
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
My_usart_init();
while(1);
}
|
最佳答案
查看完整内容[请看2#楼]
USART1_IPQHandler 应该改成 USART1_IRQHandler一个是P一个是R,注意看清楚
这是.S文件里固定的中断函数名,名错了中断自然找不到函数,就运行不是你想要的结果了
|