-
不能用施密特,用为有些干扰只能用电容才能起到滤波作用
-
这是源码,麻烦版主粘到SI里面查看吧!
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_stm32f10x_xx.s) before to branch to application main.
To reconfigure the default setting of SystemInit() function, refer to
system_stm32f10x.c file
*/
// uint8_t i;
/* System Clocks Configuration */
RCC_Configuration();
/* NVIC configuration */
NVIC_Configuration();
/* Configure the GPIO ports */
GPIO_Configuration();
Uart1_Configuration();
delay_n_1ms(1000);
SendBuffer(Buffer1,TxBufferSize);
while(1)
{
if((RxBuffer[RxCounter-2] == 0x0D)&&(RxBuffer[RxCounter-1] ==0x0A))
{
SendBuffer(RxBuffer,RxCounter);
RxBuffer[RxCounter-2] = 0;
RxCounter = 0 ;
}
}
}
/**
* @brief Configures the different system clocks.
* @param None
* @retval None
*/
void RCC_Configuration(void)
{
RCC_DeInit();
RCC_HSICmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET)
{}
/* Enable Prefetch Buffer */
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
/* Flash 2 wait state */
FLASH_SetLatency(FLASH_Latency_2);
/* HCLK = SYSCLK */
RCC_HCLKConfig(RCC_SYSCLK_Div1);
/* PCLK2 = HCLK */
RCC_PCLK2Config(RCC_HCLK_Div1);
/* PCLK1 = HCLK/2 */
RCC_PCLK1Config(RCC_HCLK_Div2);
/* PLLCLK = 4MHz * 16 = 64 MHz */
RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16);
/* Enable PLL */
RCC_PLLCmd(ENABLE);
/* Wait till PLL is ready */
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
{
}
/* Select PLL as system clock source */
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
/* Wait till PLL is used as system clock source */
while(RCC_GetSYSCLKSource() != 0x08)
{
}
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO, ENABLE);
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
}
/**
* @brief Configures the different GPIO ports.
* @param None
* @retval None
*/
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* Configure USART1 Rx as input floating */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Configure USART1 Tx as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Configure LED function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
/**
* @brief Configures the nested vectored interrupt controller.
* @param None
* @retval None
*/
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/* Configure the NVIC Preemption Priority Bits */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
/* Enable the USART1 Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void Uart1_Configuration(void)
{
USART_InitTypeDef USART_InitStructure;
/* USART1 configuration ------------------------------------------------------*/
/* USART1 configured as follow:
- BaudRate = 19200 baud
- Word Length = 8 Bits
- One Stop Bit
- No parity
- Hardware flow control disabled (RTS and CTS signals)
- Receive and transmit enabled
*/
USART_InitStructure.USART_BaudRate = 56000;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
/* Configure USART1 */
USART_Init(USART1, &USART_InitStructure);
/* Enable USART1 Receive and Transmit interrupts */
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
/* Enable the USART1 */
USART_Cmd(USART1, ENABLE);
}
void SendBuffer(uint8_t* p,uint8_t num)
{
uint8_t TxCounter;
for(TxCounter=0;TxCounter<num;TxCounter++)
{
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET)
{
}
USART_SendData(USART1,p[TxCounter]);
}
}
-
我的意思是在地址数据复用模式下, 我用16位宽度访问的时候就有问题了。
如下图:
STM32内部 STM32外部 连接的ASIC
HADDR[ 1] --- AD[ 0] ------AD[0]
HADDR[ 2] --- AD[ 1] ------AD[1]
-
-
HADDR[16] --- AD[15] ---- AD[15]
像上面的连接,是为了保证数据D0~D15的对齐关系。
但是STM32内部的真实数据地址却是错位的,这样我要访问0x*000 0002的地址数据,那么就必须使用
地址0x*000 0004的地址,因为STM32内部自动右移动一位。如果STM32不可以禁止这个功能的话,那
么对于这种16位宽数据访问的,地址数据复用模式的情况下,就有一半的地址出现不了了。
更严重的问题是:
如果我访问的数据室32位时,就出现无法访问的问题了。只能分2次进行读写。
所以请问,STM32如何处理这种问题呢?
-
从24楼的示波器看到脉冲宽度大约在160 us ,换算成ADC的转换时钟大约是100K。
楼主可否把测试程序发上来研究一下?
-
楼主为啥非要到华强北买呢
-
引用 8 楼 sturtle 的回复:
Samsung给的MultimediaDemo就可以的
请问 Samsung给的MultimediaDemo 在哪里啊 是有源码的吗
-
Hotpower挂了?不太可能吧……
-
你的OS是什么啊?? LINUX?
好像不行吧,MARK.
另外bootROM 一般都是固化在芯片里面的吧。
-
引用 23 楼 sky_jbiao 的回复:
个人建议:
1、进深数电基础,状态机啊,计数器什么的,反正到了什么条件给你,你大脑里面只有D触发器后可以开始下一步。
2、参考altera 或者XILINX的芯片说明,网上有中文的,或者找些介绍芯片的书,对FPGA的组成原理有所了解。
3、买altera FPGA/CPLD设计(高级篇)看第一章,FPGA的设计规则,牢记他们,你以后的设计思路要以它们为根本。
4、学习一门语言,VHDL和V……
讲的很中肯,学习一下啊
-
还是换本吧
-
请高手帮忙解答下,不知道的也帮我顶顶,谢谢!
-
我是在这个函数中调用这个句柄。。(不好意思,这是抄书上代码的。。。)。。。然后在调用这个地方时,就会出现刚才那样的错误,(我刚才去上课了。。各位大大在帮忙看一下),6楼的大哥是想说,把它改为类成员,或者直接把他定义为static就可以吗??
函数名称: CSerialPortDlg::CommRecvTread
描 述: 串口接收线程
输入参数: LPVOID lparam: 线程参数,创建线程时传入
输出参数: 无
返 回: 0: 线程退出, 返回值没特殊含义
*********************************************************************************************************/
DWORD CSerialPortDlg::CommRecvTread(LPVOID lparam)
{
DWORD dwLength;
BOOL ret;
hFile=CreateFile(TEXT("PIO7:"),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);
char *recvBuf = new char[1024];
CSerialPortDlg *pDlg = (CSerialPortDlg*)lparam;
BYTE ucIonum=7;
ret=::DeviceIoControl(hFile,IOCTL_GPO_SET_PIN_OUT,&ucIonum,1,NULL,0,NULL,NULL);/* 置GPO7为输出口 */
ret=::DeviceIoControl(hFile,IOCTL_GPO_SET_PIN,&ucIonum,1,NULL,0,NULL,NULL);/* 置GPO7为高电平 */
ret=::DeviceIoControl(hFile,IOCTL_GPO_CLR_PIN,&ucIonum,1,NULL,0,NULL,NULL);/* 置GPO7为低电平 */
while(TRUE)
{ /* 等待线程退出事件 */
if (WaitForSingleObject(pDlg->m_ExitThreadEvent, 0) == WAIT_OBJECT_0)
break;
if (pDlg->m_hComm != INVALID_HANDLE_VALUE&&ret==TRUE)
{ /* 从串口读取数据 */
BOOL fReadState = ReadFile(pDlg->m_hComm, recvBuf, 1024, &dwLength, NULL);
if(!fReadState)
{
//MessageBox(_T("无法从串口读取数据!"));
}
else
{
if(dwLength != 0)
OnCommRecv(pDlg, recvBuf, dwLength); /* 接收成功调用回调函数 */
}
}
}
delete[] recvBuf;
return 0;
}
-
引用 25 楼 guopeixin 的回复:
引用 16 楼 oncancel 的回复:
看到一个评测报告,WinCE6.0 R2, x86平台(Pentium 200MHz MMX)
IRQ到ISR时间(5.0us,6.3us,10.2us) (min,ave,max下同)
ISR到IST时间(5.7us,6.3us,19.9us)
以24us周期产生10^9次中断,完全被IST捕捉到。
汗,这么彪悍,真的假的。
报告地址:
http://download.microsoft.com/download/D/A/C/DAC6D6D0-07EC-4954-95D3-55273C1524D7/Independent%20Real-Time%20Report%20for%20Windows%20Embedded.pdf
学习了这份报告,果然是详细+强悍
不过它好像没有说ist的优先级以及测试的其它详细条件,所以测试结果可信度应该不高
再结合ms官方以前公布的很多系统的执行时间等信息来想的话,实际的产品中很难保证和ms测试环境完全一样,比如driver/feature等,所以这份数据可信度要打折扣
-
gz
-
up
-
引用 3 楼 91program 的回复:
去调试状态看看CString的值是否正确,如果watch窗口看不到,可以去memory窗口。
出现错误了,要一个个去排除可能的原因
对,应该DEBUG!
-
1. void init()之后是"{",而不是"("
2.void init()中的while()没有加入循环条件
所以编译是通不过的!
-
09年9月26日,中嵌老总“叶贵明”现已携款逃逸,其在重庆与上海的子公司已经被查封。成都总院的在校将近100多名学生已经在成都各大分局报案。现已经被成都公安局认定为恶劣的诈骗行为,其主要责任人:叶贵明、刘刚、陶金华、黎茂等相关人等已经被立案侦查,成都公安局局长于明日将亲赴中嵌总部与各大带有合同与收据的学员共同探讨取证,并展开抓捕工作。
另外,10多名被受骗拖欠工资的中嵌员工现也已经到公安报案,等候裁决!经公安初步调查,该培训机构为典型的三无机构,属于非法教学,诈骗钱财。
经公安局领导委托带信,望曾经在中嵌学习过的学员(无论是否学完),都尽快赶往总部,并带齐与中嵌签订的合同与缴费收据,配合公安取证,以此可以退回学生非法所得钱财。现目前,很多学员都陆续联系上,将于明日赶赴现场。
鉴于事件的恶劣性质,我们将会邀请各大电视台与媒体网络记者亲历现场参与报道整个事件始末。
国庆,大家或许会上街游行抗议中嵌的“欺诈行径”,现目前正在准备游行标语!
待看后续报道..........
09年9月26日
这是真的吗?
-
根据我的平台讲一下我的理解哈:
WinCE一个典型的启动过程:从Nand启动,bootloader和内核都保存在Nand里。
启动时,主要有两个步骤:一是bootloader初始化板子并把内核从nand拷到内存里面,二是跳到内存里面运行内核加载各个接口的驱动。
对于第一个步骤,占用的时间比第二个长得多,估计要7-10这样,第二个步骤估计也就1-3秒这样,所以我的做法是在bootloader里面添加开机的logo,只在第一个步骤的时候进行动态显示(用进度条的移动来表示),第二个步骤的时候就不再进行动态地显示了。
在内核从nand拷到内存的时候,有个专门的函数,比如说FMD_ReadSector(dwSectorAddr, pbBuffer, NULL, 1),你可以根据其中的dwSectorAddr这个参数来设置进度条的动态显示了:比如说你的SectorAddr总共为100,先LCD的中间画一个小长方形的白矩形条,开始的时候在矩形条的左边画一个小红块,然后当dwSectorAddr每增加10的时候你就在将小红块向右移整个矩形条的10%和位移。当内核从nand拷到内存完毕,你的小红块也就移到了最右边了。
-
joyzml
(朱铭雷)留个联系方式.我们交流一起学