发表于 2015-11-14 08:50:15

查询接收,中断接收两种方式。

wu93111 发表于 2015-11-17 11:06:35

安 发表于 2015-11-14 08:50
查询接收,中断接收两种方式。

我写的差不多,可是接收不到,在NVIC那里有点问题,我从网上找的,但是会报错,我对报错的几个区自己定义也不行,唉,大哥帮我看一下把,我的usart是有的,直接用的usart.c的,就没再main这写
#include "main.h"
static __IO uint32_t TimingDelay;
uint8_t __IO BlinkSpeed = 0;
/* Private function prototypes -----------------------------------------------*/
RCC_ClocksTypeDef RCC_Clocks;
USART_InitTypeDef USART2_InitStruct;
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;

void USART2_IRQHandler (void)//
{
      if (USART_GetFlagStatus(USART2,USART_FLAG_RXNE) ==SET)
                {
               USART_SendData(USART2,USART_ReceiveData(USART2));
               while (!USART_GetFlagStatus(USART2,USART_FLAG_TC));
                }
      USART_ClearITPendingBit(USART2,USART_IT_RXNE);//Öжϱê־λ
}

int main(void)
{
/*!< At this stage the microcontroller clock setting is already configured,
       this is done through SystemInit() function which is called from startup
       file (startup_stm32f030.s) before to branch to application main.
       To reconfigure the default setting of SystemInit() function, refer to
       system_stm32f0xx.c file
   */

/* SysTick end of count event each 1ms */
RCC_GetClocksFreq(&RCC_Clocks);
SysTick_Config(RCC_Clocks.HCLK_Frequency / 1000);

/* Initialize LED2 */
STM_EVAL_LEDInit(LED2);

/* Initialize User_Button on STM32NUCLEO */
STM_EVAL_PBInit(BUTTON_USER, BUTTON_MODE_EXTI);   

/* Initiate Blink Speed variable */
BlinkSpeed = 0;
USART_StructInit(&USART2_InitStruct);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_1);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//
GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_1);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_1);
//nvic
//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
//NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
//NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelPriority= 0x03;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;   
NVIC_Init(&NVIC_InitStructure);
USART_DeInit(USART2);
USART_Init(USART2, &USART2_InitStruct);
USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);
USART_ClearFlag (USART2,USART_FLAG_TC);
USART_Cmd(USART2, ENABLE);
/* Infinite loop */
while (1)
{
    /* Test on blink speed */
    if(BlinkSpeed == 0)
    {
      /*LED2 Toggle each 50ms*/
      STM_EVAL_LEDToggle(LED2);
      Delay(50);      
    }      
    else if(BlinkSpeed == 1)
    {
      STM_EVAL_LEDToggle(LED2);
      /*LED2 Toggle each 200ms */
      Delay(200);
    }

//USART_SendData(USART2, 0x5555);
}
}
/**
* @briefInserts a delay time.
* @paramnTime: specifies the delay time length, in 1 ms.
* @retval None
*/
void Delay(__IO uint32_t nTime)
{
TimingDelay = nTime;

while(TimingDelay != 0);
}
/**
* @briefDecrements the TimingDelay variable.
* @paramNone
* @retval None
*/
void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
    TimingDelay--;
}
}
#ifdefUSE_FULL_ASSERT
/**
* @briefReports the name of the source file and the source line number
*         where the assert_param error has occurred.
* @paramfile: pointer to the source file name
* @paramline: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t* file, uint32_t line)
{
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

/* Infinite loop */
while (1)
{
}
}
#endif
/**
* @}
*/

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

发表于 2015-11-17 14:47:17

下面地址下载例程:
https://www.stmcu.org.cn/document/list/index/category-550

wu93111 发表于 2015-11-17 15:31:23

安 发表于 2015-11-17 14:47
下面地址下载例程:
https://www.stmcu.org.cn/document/list/index/category-550

我现在通过串口工具发送可以在接收到,可是我突然发现我定义的USART2_IRQHandler压根就没地方调用,那为什么可以通呢:L

发表于 2015-11-17 15:44:59

看一下.S文件中,用的是哪个入口函数,如果用的是HAL库,中断函数在usart.c里面,HAL_USART_IRQHandler。

wu93111 发表于 2015-11-17 15:59:05

这个.s文件里,石油我用的那个USART2_IRQHandler的

; Amount of memory (in bytes) allocated for Stack
; Tailor this value to your application needs
; <h> Stack Configuration
;   <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
Stack_Size      EQU   0x00000400
                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp

; <h> Heap Configuration
;   <o>Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
Heap_Size       EQU   0x00000200
                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem      SPACE   Heap_Size
__heap_limit
                PRESERVE8
                THUMB

; Vector Table Mapped to Address 0 at Reset
                AREA    RESET, DATA, READONLY
                EXPORT__Vectors
                EXPORT__Vectors_End
                EXPORT__Vectors_Size
__Vectors       DCD   __initial_sp                   ; Top of Stack
                DCD   Reset_Handler                  ; Reset Handler
                DCD   NMI_Handler                  ; NMI Handler
                DCD   HardFault_Handler            ; Hard Fault Handler
                DCD   0                              ; Reserved
                DCD   0                              ; Reserved
                DCD   0                              ; Reserved
                DCD   0                              ; Reserved
                DCD   0                              ; Reserved
                DCD   0                              ; Reserved
                DCD   0                              ; Reserved
                DCD   SVC_Handler                  ; SVCall Handler
                DCD   0                              ; Reserved
                DCD   0                              ; Reserved
                DCD   PendSV_Handler               ; PendSV Handler
                DCD   SysTick_Handler                ; SysTick Handler
                ; External Interrupts
                DCD   WWDG_IRQHandler                ; Window Watchdog
                DCD   0                              ; Reserved
                DCD   RTC_IRQHandler               ; RTC through EXTI Line
                DCD   FLASH_IRQHandler               ; FLASH
                DCD   RCC_IRQHandler               ; RCC
                DCD   EXTI0_1_IRQHandler             ; EXTI Line 0 and 1
                DCD   EXTI2_3_IRQHandler             ; EXTI Line 2 and 3
                DCD   EXTI4_15_IRQHandler            ; EXTI Line 4 to 15
                DCD   0                              ; Reserved
                DCD   DMA1_Channel1_IRQHandler       ; DMA1 Channel 1
                DCD   DMA1_Channel2_3_IRQHandler   ; DMA1 Channel 2 and Channel 3
                DCD   DMA1_Channel4_5_IRQHandler   ; DMA1 Channel 4 and Channel 5
                DCD   ADC1_IRQHandler                ; ADC1
                DCD   TIM1_BRK_UP_TRG_COM_IRQHandler ; TIM1 Break, Update, Trigger and Commutation
                DCD   TIM1_CC_IRQHandler             ; TIM1 Capture Compare
                DCD   0                              ; Reserved
                DCD   TIM3_IRQHandler                ; TIM3
                DCD   0                              ; Reserved
                DCD   0                              ; Reserved
                DCD   TIM14_IRQHandler               ; TIM14
                DCD   TIM15_IRQHandler               ; TIM15
                DCD   TIM16_IRQHandler               ; TIM16
                DCD   TIM17_IRQHandler               ; TIM17
                DCD   I2C1_IRQHandler                ; I2C1
                DCD   I2C2_IRQHandler                ; I2C2
                DCD   SPI1_IRQHandler                ; SPI1
                DCD   SPI2_IRQHandler                ; SPI2
                DCD   USART1_IRQHandler            ; USART1
                DCD   USART2_IRQHandler            ; USART2
               
__Vectors_End
__Vectors_SizeEQU__Vectors_End - __Vectors
                AREA    |.text|, CODE, READONLY
; Reset handler routine
Reset_Handler    PROC
               EXPORTReset_Handler               
      IMPORT__main
      IMPORTSystemInit

      LDR   R0, =__initial_sp          ; set stack pointer
      MSR   MSP, R0
;;Check if boot space corresponds to test memory
      LDR R0,=0x00000004
      LDR R1,
      LSRS R1, R1, #24
      LDR R2,=0x1F
      CMP R1, R2
      
      BNE ApplicationStart
   
;; SYSCFG clock enable   
   
      LDR R0,=0x40021018
      LDR R1,=0x00000001
      STR R1,
      
;; Set CFGR1 register with flash memory remap at address 0
      LDR R0,=0x40010000
      LDR R1,=0x00000000
      STR R1,
ApplicationStart      
               LDR   R0, =SystemInit
               BLX   R0
               LDR   R0, =__main
               BX      R0
               ENDP
; Dummy Exception Handlers (infinite loops which can be modified)
NMI_Handler   PROC
                EXPORTNMI_Handler                  
                B       .
                ENDP
HardFault_Handler\
                PROC
                EXPORTHardFault_Handler            
                B       .
                ENDP
SVC_Handler   PROC
                EXPORTSVC_Handler                  
                B       .
                ENDP
PendSV_HandlerPROC
                EXPORTPendSV_Handler               
                B       .
                ENDP
SysTick_Handler PROC
                EXPORTSysTick_Handler               
                B       .
                ENDP
Default_Handler PROC
                EXPORTWWDG_IRQHandler               
                EXPORTRTC_IRQHandler               
                EXPORTFLASH_IRQHandler               
                EXPORTRCC_IRQHandler               
                EXPORTEXTI0_1_IRQHandler            
                EXPORTEXTI2_3_IRQHandler            
                EXPORTEXTI4_15_IRQHandler            
                EXPORTDMA1_Channel1_IRQHandler      
                EXPORTDMA1_Channel2_3_IRQHandler   
                EXPORTDMA1_Channel4_5_IRQHandler   
                EXPORTADC1_IRQHandler               
                EXPORTTIM1_BRK_UP_TRG_COM_IRQHandler
                EXPORTTIM1_CC_IRQHandler            
                EXPORTTIM3_IRQHandler               
                EXPORTTIM14_IRQHandler               
                EXPORTTIM15_IRQHandler               
                EXPORTTIM16_IRQHandler               
                EXPORTTIM17_IRQHandler               
                EXPORTI2C1_IRQHandler               
                EXPORTI2C2_IRQHandler               
                EXPORTSPI1_IRQHandler               
                EXPORTSPI2_IRQHandler               
                EXPORTUSART1_IRQHandler            
                EXPORTUSART2_IRQHandler            

WWDG_IRQHandler
RTC_IRQHandler
FLASH_IRQHandler
RCC_IRQHandler
EXTI0_1_IRQHandler
EXTI2_3_IRQHandler
EXTI4_15_IRQHandler
DMA1_Channel1_IRQHandler
DMA1_Channel2_3_IRQHandler
DMA1_Channel4_5_IRQHandler
ADC1_IRQHandler
TIM1_BRK_UP_TRG_COM_IRQHandler
TIM1_CC_IRQHandler
TIM3_IRQHandler
TIM14_IRQHandler
TIM15_IRQHandler
TIM16_IRQHandler
TIM17_IRQHandler
I2C1_IRQHandler
I2C2_IRQHandler
SPI1_IRQHandler
SPI2_IRQHandler
USART1_IRQHandler
USART2_IRQHandler
                B       .
                ENDP
                ALIGN
;*******************************************************************************
; User Stack and Heap initialization
;*******************************************************************************
               IF      :DEF:__MICROLIB
               
               EXPORT__initial_sp
               EXPORT__heap_base
               EXPORT__heap_limit
               
               ELSE
               
               IMPORT__use_two_region_memory
               EXPORT__user_initial_stackheap
               
__user_initial_stackheap
               LDR   R0, =Heap_Mem
               LDR   R1, =(Stack_Mem + Stack_Size)
               LDR   R2, = (Heap_Mem +Heap_Size)
               LDR   R3, = Stack_Mem
               BX      LR
               ALIGN
               ENDIF
               END
;************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE*****

页: 1 [2]
查看完整版本: uncleo-f030r8的usart通信