初中生
最后登录1970-1-1
在线时间 小时
注册时间2017-6-21
|
10火花
以下三个问题是基于ESP8266 wifi例程中的手机app控制例程
Q1:源程序中有这么一段代码
//滴答定时器的代码
void SysTick_Init( void ){
/* SystemFrequency / 1000 1ms中断一次
* SystemFrequency / 100000 10us中断一次
* SystemFrequency / 1000000 1us中断一次
*/
if ( SysTick_Config(SystemCoreClock / 1000000) ) // ST3.5.0库版本
{
/* Capture error */
while (1);
}
// 关闭滴答定时器
SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;
}
我的理解是是 打开滴答定时器之后又关闭滴答定时器?为什么要这样做呢? 滴答定时器会产生中断吗?如果产生中断,配置中断优先级的代码在哪呢?我把中断服务函数中滴答定时器的代码也附在下面了,请解释下其中的含义啊
//中断服务程序中关于滴答定时器的代码
void SysTick_Handler(void)
{
TimingDelay_Decrement();
}
Q2:在bsp_esp8266.c这个程序中,下面这一行代码中 ={0} 是什么含义?
struct STRUCT_USARTx_Fram strEsp8266_Fram_Record = { 0 };
下面的结构体声明中中__IO u16 FramFinishFlag :1; 这句代码是什么含义(冒号后面写1)?
//结构体声明代码
extern struct STRUCT_USARTx_Fram //串口数据帧的处理结构体
{
char Data_RX_BUF [ RX_BUF_MAX_LEN ];
union {
__IO u16 InfAll;
struct {
__IO u16 FramLength :15; // 14:0
__IO u16 FramFinishFlag :1; // 15
} InfBit;
};
} strEsp8266_Fram_Record;
Q3:在中断服务函数中,有下面一行代码,当读数据寄存器非空的时候,把寄存器中的数据给ucCh,后一条语句中之后又把ucCh赋值给谁呢?
if ( USART_GetITStatus ( macESP8266_USARTx, USART_IT_RXNE ) != RESET )
{
ucCh = USART_ReceiveData( macESP8266_USARTx );
if ( strEsp8266_Fram_Record .InfBit .FramLength < ( RX_BUF_MAX_LEN - 1 ) ) //预留1个字节写结束符
strEsp8266_Fram_Record .Data_RX_BUF [ strEsp8266_Fram_Record .InfBit .FramLength ++ ] = ucCh;
}
|
最佳答案
查看完整内容
1- 优先级在这个函数里面定义:SysTick_Config,不关掉也可以,不关掉的话会产生中断,现在关掉是方便后面使用的时候打开就行
2-{0}表示初始化结构体成员都是0, :数字这个是表示位域,具体的可百度 :c语言位域
3-ucCh是一个全局变量,具体哪里使用你可以在整个工程搜索这个变量
|