【发布时间】:2018-06-11 18:22:13
【问题描述】:
尝试从串行 Putty 会话接收字符时遇到一些问题。当我在 Putty 中输入句子/多个字符以将字符发送到 stm32f4 微控制器时,它似乎没有使用中断方法接收所有字符。
那么两个问题:
- 不确定这里发生了什么。我错过了什么吗?
- 当为接收字符调用中断时,我有点困惑。是为每个字符调用中断,还是用一次中断调用处理整个字符串?
代码:
void USART_Write(USART_TypeDef * USARTx, char * str) {
while(*str){
// First check if the Transmission Data register is empty
while ( !(USARTx->SR & USART_SR_TXE)){};
// Write Data to the register which will then get shifted out
USARTx->DR =(*str &(uint16_t) 0x01FF);
str++;
}
// Wait until transmission is complete
while ( !(USARTx->SR & USART_SR_TC)){};
}
void receive(USART_TypeDef * USARTx, volatile char *buffer,
volatile uint32_t * pCounter){
if(USARTx->SR & USART_SR_RXNE){
char c = USARTx->DR;
USART_Write(USARTx,&c);
USART_Write(USARTx,"\n\r");
}
}
void USART2_IRQHandler(void){
receive(USART2, USART2_Buffer_Rx,&Rx2_Counter);
}
腻子会话:
(我在 Putty 中输入asdfghjkl 并使用USART_WRITE(...) 函数打印出接收字符)
asdfghjkl
a
s
g
k
【问题讨论】:
-
'等到传输完成' - 不是从 rx 中断处理程序调用时,不。这是一个非常糟糕的主意。
-
'USART_Write(USARTx,&c);'......'while(*str)' - 不!单个字符不是以 NUL 结尾的字符数组!
-
您使用中断从中断发送数据。这是个非常糟糕的主意。
标签: c interrupt stm32 stm32f4discovery