古人云大风起于青萍之末,释家亦说缘起,与博客的缘分至此而起,但愿一只无脚鸟也能似那鲲鹏扶摇九天而上。
STM32篇
昨天复习了串口通信和外部中断实验。对于串口通信实验,特别需要注意的是串口的数据寄存器USART_DR,这是一个双寄存器,包含TDR和RDR,当向该寄存器写数据的时候,串口就会自动发送,当收到数据的时候,也是存在该寄存器内。具体的参加32的参考手册。还有就是系统文件usart.c里正点原子的一段代码
void USART1_IRQHandler(void)
{
u8 res;
#ifdef OS_CRITICAL_METHOD
OSIntEnter();
#endif
if(USART1->SR&(1<<5)) //如果收到数据
{
res=USART1->DR;
if((USART_RX_STA&0x80)==0
{
if(USART_RX_STA&0x40)
{
if(res!=0x0a)
{
USART_RX_STA=0; //接收错误,重新开始
}
else
{
USART_RX_STA|=0x8000; //接收完成
}
}
else
{
if(res==0x0d)
{
USART_RX_STA|=0x4000;
}
else
{
USART_RX_BUF[USART_RX_STA&0X3F]=res;
USART_RX_STA++;
if(USART_RX_STA>(USART_REC_LEN-1)) //超过了最大接收字节数,接收错误,重新开始
USART_RX_STA=0;
}
}
}
}
这段代码中的USART_RX_STA为接收状态标记,是人为规定的寄存器,这段代码的执行顺序应该是从下往上,结合着正点原子的不完全手册很好理解了。(串口函数printf函数还是有点问题,串口调试助手上没有打印出来)
对于外部中断实验需要学会调用两个函数
1,void Ex_NVIC_Config(u8 GPIOx,u8 BITx,u8 TRIM);为外部中断配置函数,对于19个外部中断/事件请求,该函数只针对GPIOA~G,不针对PVD,RTC和USB唤醒实验;参数BITx代表需要使能的位;TRIM代表
触发方式(低电平触发,高电平触发或任意电平触发)
2,void MY_NVIC_Init(u8 NVIC_PreemptionPriority,u8 NVIC_SubPriority,u8 NVIC_Channel,u8 NVIC_Group) ;
该函数的四个参数分别为抢占优先级,响应优先级,中断号,中断分组;
c语言篇--数据的表现形式及其运算
基本上比较简单,只是有点小的知识点需要关注下,实际运用中尤其要注意数据的溢出问题。