历史上的今天
今天是:2025年03月18日(星期二)
2019年03月18日 | STM32F103串口通讯注意事项
2019-03-18 来源:eefocus
(1)通过串口不断发送数据
库函数中的
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);
函数不具备缓存作用,当我们需要连续不断发送一段数据时,我们需要等待前一次数据发送完成,放置数据丢失错误
void usart2_send_char(u8 _char)
{
/* 等待上一次发送完成*/
while( !(USART2->SR & (1 << USART2_SR_TC) )) ;
USART2->DR = _char ;
}
(2)通过中断接受数据
通过中断中断接受数据时我们可以通过读取数据寄存器中的值使硬件自动清除挂起的接收中断标志位,为了防止其他外设功能的错误,我们应该对每一个中断都养成手动清除中断标志位的习惯。
void USART2_IRQHandler(void)
{
u8 rec ;
if (USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
{
rec = USART_ReceiveData(USART2) ;
usart2_send_char(rec) ;
USART_ClearITPendingBit(USART2 , USART_IT_RXNE);
}
}
同时,使用串口调试助手时应该注意发送区的\r\n(即换行),因为这个是不可见但是是有效的发送数据。
史海拾趣
|
手头有两个单片机学习试验箱,一个是周立功的51试验箱, 另一个是利尔达的MSP430F449试验箱, 这两个试验箱基本完整,都配有书 先来看看利尔达的MSP430试验箱,跟现在利尔达网站的一样,现在价格便宜了不少,当初是1750快大洋买的,有感兴趣的可 ...… 查看全部问答> |
|
CE5 换成了.CE6.EVC下写的程序用不了!只能换成VS了. 移值过去后,编译成功,在模拟器下也能运行! 把在放到设备上,点它没反应! 用同样的SDK从0写个程序上去就可以运行! 这是为什么呢?有什么好的办法不用从0开始写.直接让移值过来的程序直接运行 ...… 查看全部问答> |
|
我有一個hex檔 沒有源程式 我想把它下載到單片機上 (c51rf-s3100) 在keilc51上應該怎樣操作呢 或者能用其他方式燒到板上呢? 請各位大大指教一下~ 剛從零開始學單片機的小生~… 查看全部问答> |
|
请问各位大虾,wait on tx_clk_rec until tx_clk_rec = \'1\' and iq_tx_enable_rec = \'1\'这条语句是什么意思呢? 我的程序中是,wait on tx_clk_rec until tx_clk_rec = \'1\' and iq_tx_enable_rec = \'1\'这条语句后面的语句是等待2ns之后给i ...… 查看全部问答> |
|
最近在做一个2440的nrf2401驱动程序,里面要用到中断,所以我弄了个中断服务程序和一个中断注册函数,但是在编译的时候出现了下面这个warming: drivers/char/s3c2440_nrf24l01.c: At top level: drivers/char/s3c2440_nrf24l01.c:131: warning: ...… 查看全部问答> |




